如何在Windows操作系统的情况下将数据从OpenCV或C++线程函数返回到主线程
How to return data from OpenCV or C++ Thread function to main thread in case of windows os?
我对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
}
改用全局变量,以便其他线程可以读取/写入它们。
通过这样做,您无需担心线程"返回某些内容"。
您可以使用
C++11 标准中支持的std::thread
。然后,您可以根据需要传递pDataArray[count]
和任意数量的其他变量,这样您就不必返回任何内容来获取输出。您可以在此处获取有关此类的更多信息:http://www.cplusplus.com/reference/thread/thread/
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 为什么我不能在 while 循环中创建线程?