我正在尝试在Windows中使用socket.h函数.基本上,我目前正在查看https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram上的示例代码.我知道socket.h是一个Unix函数 - 无论如何我在编译这个示例代码时可以轻松地模拟该环境吗?不同的IDE /编译器会改变什么吗?
否则,我想我需要利用虚拟化的Linux环境,这可能是最好的,因为代码最有可能在UNIX环境中运行.
谢谢.
遇到以下代码段时遇到问题.我得到的参数计数不匹配.
由于多线程和不安全更新的问题,我不得不写这个.
delegate void data_INPUTDelegate(object sender, System.IO.Ports.SerialDataReceivedEventArgs e);
private void data_INPUT(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string data = serialPort.ReadLine();
string[] tokens = data.Split(':');
if (tokens[0] == "$SENSOR")
{
if (label_sensorValue.InvokeRequired)
{
data_INPUTDelegate del = new data_INPUTDelegate(data_INPUT);
label_sensorValue.Invoke(del,new object[] {tokens[1]});
}
else
{
label_sensorValue.Text = tokens[1];
}
}
}
Run Code Online (Sandbox Code Playgroud) 我目前有一个按钮,上面有一个图标/图像.我在XAML中配置了按钮和图像:
<Button Height="69" HorizontalAlignment="Left" Margin="-2,0,0,0" Name="toggleBroadcast" VerticalAlignment="Top" Width="64" Grid.Row="1" Opacity="0.5" Click="changeBroadcastState_Click">
<Image Source="Images\playIcon.png" />
</Button>
Run Code Online (Sandbox Code Playgroud)
我需要能够以编程方式将此按钮的图像从playIcon更改为stopIcon.我怎样才能做到这一点?
我目前有以下for循环:
for(list<string>::iterator jt=it->begin(); jt!=it->end()-1; jt++)
Run Code Online (Sandbox Code Playgroud)
我有一个字符串列表,它在一个更大的列表中(list<list<string> >
).我想循环遍历内部列表的内容,直到我到达倒数第二个元素.这是因为我已经处理了最终元素的内容,没有理由再次处理它们.
但是,使用it->end()-1
无效 - 我不能在-
这里使用运算符.虽然我可以使用--
运算符,但这会在每个循环中减少最终的迭代器.
我相信STL列表是一个双向链表,所以从我的角度来看,应该可以做到这一点.
建议吗?提前致谢
我目前正致力于构建可以使用热成像相机匹配从固定点拍摄的红外和非红外图像的软件.
用例如下:使用红外热像仪和标准相机使用固定点的三脚架拍摄照片.拍摄照片后,摄影师想要匹配每个相机的图像.在某些情况下,只使用一台摄像机拍摄图像,因为不需要其他图像类型.是的,可以使用时间戳匹配图像,但最终用户要求使用计算机视觉匹配图像.
我查看了StackOverflow上的其他图像匹配帖子 - 他们经常专注于使用直方图匹配和特征检测器.直方图匹配不是一个选项,因为我们无法匹配两种图像类型之间的颜色.结果,我开发了一个进行特征检测的应用程序.除了标准特征检测之外,我还添加了一些逻辑,如果它们不在彼此的某个边界内,则两个关键点无法匹配(查询图像最左侧的关键点与该关键点上的关键点不匹配)候选图像的最右侧) - 此过程发生在下面代码的第3阶段.
为了让您了解当前输出,此处生成了有效且无效的匹配 - 请注意,热像图像位于左侧.我的目标是提高匹配过程的准确性.
有效匹配:
匹配无效:
这是代码:
// for each candidate image specified on the command line, compare it against the query image
Mat img1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); // loading query image
for(int candidateImage = 0; candidateImage < (argc - 2); candidateImage++) {
Mat img2 = imread(argv[candidateImage + 2], CV_LOAD_IMAGE_GRAYSCALE); // loading candidate image
if(img1.empty() || img2.empty())
{
printf("Can't read one of the images\n");
return -1;
}
// detecting keypoints
SiftFeatureDetector detector;
vector<KeyPoint> …
Run Code Online (Sandbox Code Playgroud) 我目前正在使用带有64 KB SRAM的ARM Cortex M3处理器构建嵌入式系统.目前,我正在寻找一种方法来确保使用STL容器确定性能,其中包括确保在运行时不会最终耗尽内存.
我主要关注STL容器如何执行动态内存分配.虽然我可以利用自定义分配器让这些结构从我预留的池中获取内存,但我需要为每个结构设置一个单独的池,以确保结构的一个实例不能占用另一个实例的空间.
我正在与这个项目中的其他人一起工作,他们不想关注内存的原始分配,并且更愿意能够利用"众所周知的"数据结构(堆栈,队列,双端队列等).因此,我正在考虑围绕C阵列构建包装器以提供这些结构.这将支持静态分配支持这些容器所需的内存,并允许其他开发人员根据编译器提供的代码大小信息知道他们在运行时之前实例化的容器的大小.在我看来,这可以保证在运行时不会发生内存中断问题,并大大简化了系统设计.
另一种选择是在系统初始化时分配STL容器.在初始化期之后,不会发生额外的动态内存分配.但是,据我所知,标准C++ STL数据结构不支持这一点 - 它要求堆栈之类的容器能够预先分配(类似于向量).
对于我关于围绕标准C阵列构建类的提议有什么意见,我将不胜感激?另外,是否有更简单的方法在编译时分配静态大小的STL容器,例如静态大小的堆栈或队列?(我知道这可能是矢量,但其他我不确定)
注意:我已经阅读了另一个问题(嵌入式C++是否使用STL),但是这个问题的作者并未明确他们有多少内存(除了他们如何使用ARM7进程)或似乎是考虑类似于我的解决方案.
第二个注意:我知道对于一些开发人员来说,64 KB的SRAM可能看起来像很多内存.事实上,我已经在AVR处理器上进行了大量减少内存的开发,所以我理解这个观点.但是,从我目前的(可能是未知的)视图来看,在谈论STL容器时,64 KB的内存并不多.
c++ stl deterministic dynamic-memory-allocation static-memory-allocation
我目前正在编写shell.我执行进程并利用SIGCHLD
信号处理程序在它们完成时清理(等待它们).
一切都在工作 - 除非我执行升级权限的进程sudo
.在这些情况下,我从来没有得到过SIGCHLD
信号 - 所以我永远不知道这个过程已经完成了.
当我收到诸如此类的命令时sudo ls
,我执行程序sudo
然后提供ls
参数.我执行此执行execvp
.
如果我在ps -aux
shell执行后看一下sudo ls
,我会看到以下内容:
root 4795 0.0 0.0 4496 1160 pts/29 S+ 16:51 0:00 sudo ls
root 4796 0.0 0.0 0 0 pts/29 Z+ 16:51 0:00 [ls] <defunct>
Run Code Online (Sandbox Code Playgroud)
因此,sudo
在分配pid = 4795
了孩子(ls)的情况下,跑步和分配4796
.孩子已完成任务,现在正处于一个僵尸状态.sudo
似乎并不想收获僵尸进程而只是坐在那里.
我想知道是什么原因造成这种现象-我已经尝试了不同的技术来清除这些僵尸进程,比如下运行我的壳sudo
和等待直接sudo
和PID
其sudo
执行(在上面的例子中4796).这些技术都没有奏效.
一如既往,任何建议都表示赞赏.
我目前有一个应用程序,它截取主持人桌面的屏幕截图,然后通过自定义协议将其广播给观众.为了使图像能够足够快地传输以获得每秒2-3个图像的帧速率,我需要确保图像大小始终小于~300 KB.
我正在使用C#作为演示者应用程序,它通过以下过程将屏幕截图编码为JPEG.我担心的是,使用静态压缩设置时图像质量会有很大差异.如果我有应用程序捕获我的屏幕,当我有Visual Studio全屏时,图像输出将是~200 KB,但如果我最小化我的屏幕并显示我的桌面背景,它将是~400 KB.
我可以将编码过程放入循环中,并不断减小图像大小,直到字节数组的大小小于300 KB,但这似乎是一项繁琐的操作.还有其他方法我可以使用吗?
提前致谢.
// get the screenshot
System.Drawing.Rectangle totalSize = System.Drawing.Rectangle.Empty;
//foreach (Screen s in Screen.AllScreens)
totalSize = System.Drawing.Rectangle.Union(totalSize, Screen.PrimaryScreen.Bounds);
Bitmap screenShotBitmap = new Bitmap(totalSize.Width, totalSize.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
screenShotBitmap.SetResolution(96, 96);
Graphics screenShotGraphics = Graphics.FromImage(screenShotBitmap);
screenShotGraphics.CopyFromScreen(totalSize.X, totalSize.Y,
0, 0, totalSize.Size, CopyPixelOperation.SourceCopy);
screenShotGraphics.Dispose();
// image codec information
ImageCodecInfo imageCodecInfo = GetEncoderInfo("image/jpeg");
// encoder settings
System.Drawing.Imaging.Encoder encoderQuality;
System.Drawing.Imaging.Encoder encoderColor;
encoderQuality = System.Drawing.Imaging.Encoder.Quality;
encoderColor = System.Drawing.Imaging.Encoder.ColorDepth;
// compression & quality for JPEG output
Int64 quality = 40L;
// storage …
Run Code Online (Sandbox Code Playgroud) 我试图简单地将从fget接收的字节转换为二进制.
我知道第一个字节的值是基于打印值的49.我现在需要将其转换为二进制值.
unsigned char byte = 49;// Read from file
unsigned char mask = 1; // Bit mask
unsigned char bits[8];
// Extract the bits
for (int i = 0; i < 8; i++) {
// Mask each bit in the byte and store it
bits[i] = byte & (mask << i);
}
// For debug purposes, lets print the received data
for (int i = 0; i < 8; i++) {
printf("Bit: %d\n",bits[i]);
}
Run Code Online (Sandbox Code Playgroud)
这将打印:
Bit: 1
Bit: 0 …
Run Code Online (Sandbox Code Playgroud) 关于C++内存管理的快速问题
如果我执行以下操作:
pointer = new char [strlen(someinput_input)+1];
Run Code Online (Sandbox Code Playgroud)
然后再次执行它,可能会返回不同的结果strlen(someinput_input)
.
这是否会导致从前一个" new
"语句中分配内存?如在,每个new
语句是从OS接收另一块HEAP内存,还是只是重新分配?
假设我做了最终的delete pointer[];
遗嘱,将我曾分配过的任何和所有内存释放new
到该指针?