Как вернуть данные из функции потока OpenCV или C ++ в основной поток в случае Windows OS?

0

Я мало знаком с потоками openCV или C++.

Основная проблема заключается в том, что я передаю некоторые данные функции потока, она выполняет некоторую обработку, и после этого ИТ НУЖНО ПЕРЕСМОТРЕТЬ ОБРАБОТАННЫЕ ДАННЫЕ.

В Win 32 или V C++ эти возвращаемые данные мы можем отправить/отправить через сообщение в основной поток в случае потоков пользовательского интерфейса, но в случае рабочих потоков нет возможности вернуть данные.

Что относительно случая с открытым потоком 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
}
Теги:
opencv
multithreading

2 ответа

0

Вместо этого используйте глобальные переменные, чтобы другие потоки могли читать/писать на них.

Делая это, вам не нужно беспокоиться о потоке, "возвращающем что-то".

0

Вы можете использовать std::thread который поддерживается в стандарте С++ 11. Затем вы можете передать свой pDataArray[count] и столько других переменных, сколько хотите, поэтому вам не нужно ничего возвращать, чтобы получить результат. Вы можете получить дополнительную информацию об этом классе здесь: http://www.cplusplus.com/reference/thread/thread/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню