Мне нужно передать несколько значений в новый поток (созданный с помощью функции _beginthreadex
). Я создал структуру для этого.
struct CaptureThreadInput {
std::mutex* eventMutex;
std::condition_variable* eventCv;
std::vector<DispatchEvent>* eventVector;
int capId, width, height;
};
Я запускаю новый поток, используя закрытую функцию объекта Dispatch
в основном потоке.
void Dispatch::startCaptureThread(int i) {
CaptureThreadInput params = {
&eventMutex,
&eventCv,
&eventVector,
i, 1280, 720
};
CaptureThreadInput* data = ¶ms;
cout << "Address from dispatch " << std::addressof(*data) << "\n";
cout << "Mutex from dispatcher " << std::addressof(*(data->eventMutex)) << "\n";
cout << "CapId from dispatcher " << data->capId << "\n";
cout << "Width from dispatcher " << data->width << "\n";
_beginthreadex(NULL, 0, &(CaptureThread::initThread), ¶ms, 0, 0);
}
В начатой теме я просто отлаживаю вывод. CaptureThread::initThread
является публичной статической функцией.
unsigned int __stdcall CaptureThread::initThread(void* in) {
CaptureThreadInput* data = (CaptureThreadInput*)in;
cout << "Address from thrd " << std::addressof(*data) << "\n";
cout << "Mutex from thread " << std::addressof(*(data->eventMutex)) << "\n";
cout << "CapId from thread " << data->capId << "\n";
cout << "Width from thread " << data->width << "\n";
return 0;
}
Однако я получаю разные значения из созданной структуры в Dispatch::startCaptureThread
и во вновь созданном потоке. Struct возвращает разные адреса в каждом из двух потоков. Консольный вывод:
Address from dispatch 0000001A83EFF568
Mutex from dispatcher 0000001A83EFFD10
CapId from dispatcher 0
Width from dispatcher 1280
Address from thrd 0000001A83EFF568
Mutex from thread CCCCCCCCCCCCCCCC
CapId from thread -858993460
Width from thread -858993460
Я также попытался закомментировать eventMutex
, eventCv
и eventVector
, оставив в структуре только целые числа, и результаты были одинаковыми.
Есть идеи, что может быть причиной этого, и как я могу изменить свой код, чтобы исправить это?
Разработка с использованием Microsoft Visual Studio для платформы Windows x64.