gpt4 book ai didi

.net - OpenCV多线程线程消息

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:18 24 4
gpt4 key购买 nike

我正在使用 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com