作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 .Net 3.5 和 OpenCV 1.1 编写程序。我有多个线程需要从计算机上的网络摄像头获取图像变量,问题是当多个线程尝试同时访问摄像头时出现内存冲突错误。我知道我可以使用 PostThreadMessage 和 GetMessage 将变量发送到线程。谁能给我一个教程或示例,说明如何使用 PostThreadMessage
和 GetMessage
将变量传递给正在运行的线程?
我得到的错误是内存访问冲突错误,当我的两个工作线程都试图调用一个从相机获取图像的函数时。我想通过让一个线程获取所有其他线程的图像来解决这个问题。它们每个都有一个 IplImage 变量,用于存储相机捕获的图像。希望这可以帮助。
最佳答案
在这里我要冒险,假设您想以串行方式复制相机图像,然后以多线程方式对复制的数据(IplImage)进行操作。
要安全地执行此操作,正如陌生人指出的那样,您必须锁定您可能使用线程访问的内存(或变量)。如何使用 Windows 执行此操作的一个非常简短的示例 CRITICAL_SECTION如下:
CRITICAL_SECTION cs;
/* Initialize the critical section -- This must be done before locking */
InitializeCriticalSection(&cs);
...
/* Release system object when all finished --
usually at the end of the cleanup code */
DeleteCriticalSection(&cs);
现在,当您访问相机(或与此相关的任何不可共享的资源)时,您只需用以下两行围绕您正在访问的内容:
EnterCriticalSection(&cs);
/* Operate on your shared data */
LeaveCriticalSection(&cs);
用这两行围绕你的代码(例如 IplImage* frame = cvQueryFrame(xyz);)应该可以解决你的冲突..但听起来你的代码可以做更多的组织..
关于.net - OpenCV多线程线程消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645238/
我是一名优秀的程序员,十分优秀!