在 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进程的内存使用情况?

如何在不刷新页面的情况下从数据库中的textarea添加数据[重复]

Ubantu 使用extundelete恢复数据