在 Windows 操作系统的情况下,如何将数据从 OpenCV 或 C++ 线程函数返回到主线程?
Posted
技术标签:
【中文标题】在 Windows 操作系统的情况下,如何将数据从 OpenCV 或 C++ 线程函数返回到主线程?【英文标题】:How to return data from OpenCV or C++ Thread function to main thread in case of windows os? 【发布时间】:2014-12-26 06:27:41 【问题描述】:我对 openCV 或 C++ 线程不太熟悉。
主要问题是我正在将一些数据传递给线程函数,它会进行一些处理,然后需要重新发送已处理的数据。
在 Win 32 或 VC++ 中,在 UI 线程的情况下,我们可以通过消息将返回数据发布/发布到主线程,但在工作线程的情况下,无法返回数据。
openCV 或 C++ 线程案例如何将返回数据发送到主线程?你能告诉我怎么做吗?
我使用的代码如下所示
// .h file
#define MAX_THREADS 3
#include "windows.h"
typedef struct MyData
unsigned char* colorPixelData;
uint32* punTIFFImageData;
int ii;
int jj;
int hh;
int ww;
int nWidth;
int kk;
MYDATA, *PMYDATA;
void MyThreadFunction(void *arg);
和
// .cpp file, Main thread
PMYDATA pDataArray[MAX_THREADS];
PMYDATA pReturnedDataArray[MAX_THREADS];
HANDLE hThreadArray[MAX_THREADS];
//some code
hThreadArray[count] = CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE)MyThreadFunction,
(void *)&pDataArray[count], // argument to thread function
0,
NULL);
WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);
//called thread function
void MyThreadFunction(void *arg)
//NEED TO RETURN DATA FROM HERE TO MAIN THREAD pReturnedDataArray
【问题讨论】:
【参考方案1】:改用全局变量,以便其他线程可以读/写它们。
通过这样做,您不必担心线程“返回某些东西”。
【讨论】:
【参考方案2】:您可以使用 C++11 标准支持的std::thread
。然后你可以传递你的pDataArray[count]
和你想要的尽可能多的其他变量,这样你就不必返回任何东西来获得你的输出。您可以在此处获取有关此课程的更多信息:
http://www.cplusplus.com/reference/thread/thread/
【讨论】:
以上是关于在 Windows 操作系统的情况下,如何将数据从 OpenCV 或 C++ 线程函数返回到主线程?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有内存错误的情况下加载巨大的时间序列 Windows 数据集?
如何在不从终端或任何编辑器执行的情况下运行 python 程序 [重复]
2种方法教你,如何将exe注册为windows服务,直接从后台运行
在 Windows系统下如何监视EasyNVR进程的内存使用情况?