如何在Windows操作系统的情况下将数据从OpenCV或C++线程函数返回到主线程

How to return data from OpenCV or C++ Thread function to main thread in case of windows os?

本文关键字:线程 C++ OpenCV 函数 返回 数据 Windows 操作系统 情况下      更新时间:2023-10-16

我对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/