.net - OpenCV多线程线程消息

标签 .net c++ multithreading opencv message-passing

我正在使用 .Net 3.5 和 OpenCV 1.1 编写程序。我有多个线程需要从计算机上的网络摄像头获取图像变量,问题是当多个线程尝试同时访问摄像头时出现内存冲突错误。我知道我可以使用 PostThreadMessage 和 GetMessage 将变量发送到线程。谁能给我一个教程或示例,说明如何使用 PostThreadMessageGetMessage 将变量传递给正在运行的线程?

我得到的错误是内存访问冲突错误,当我的两个工作线程都试图调用一个从相机获取图像的函数时。我想通过让一个线程获取所有其他线程的图像来解决这个问题。它们每个都有一个 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/

相关文章:

c# - 在与 ASP.Net 中的搜索控件相同的页面上显示搜索结果的最佳方式

C# WebService 客户端原始输入/输出

c++ - 包括在 C++ 中引起问题。如何正确地学习使用 C++

java - 多线程 Java Web 服务器 - java.net.SocketTimeoutException

javascript - form.submit 触发多次,每次响应后额外触发一次

vb.net - VB 中的 LINQ InvalidCastException

c++ - 在 C/C++ 中可以用 float 准确表示的最大 uint64

使用 CodeSynthesis XSD 树映射的 C++ 类型

java - 为什么 volatile 不能正常工作

multithreading - C# TPL 任务 - 一次有多少