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