У меня есть основной поток и другой рабочий поток, который выполняет некоторую обработку. В настоящее время я сигнализирую о событиях из основного потока, на которые рабочий поток должен ответить. В моем основном потоке у меня есть следующее:
frameNo = 1;
for (int j = 0; j < 10; j++) {
frameNo++;
tEvent->SetEvent();
}
В моем рабочем потоке у меня есть это:
int RThread::Run()
{
while (1) {
WaitForSingleObject(myEvent->m_hObject, INFINITE);
std::cout << "Event signalled!" << std::endl;
std::cout << "Frame number is: " + std::string(obj->frameNo) << std::endl;
}
return 0;
}
На данный момент рабочий поток печатает только то, что frameNo является равный 11, я предполагаю, потому что основной поток выполняет итерацию настолько быстро, что рабочий поток достигает этой стадии, только когда frameNo уже увеличен до 11. В результате ему не хватает чисел 1-10.
Я не хочу пропустить цифры 1-10, хотя это может быть немного позади.
Как я могу каким-то образом отслеживать, сколько раз было установлено событие? Я думал о том, чтобы просто не использовать события вообще, а вместо этого просто использовать Очередь для получения переменных sh, в то время как рабочий поток просто берет из очереди. Но если я использую эту очередь, понадобится ли какой-то критический раздел вокруг очереди, так как оба потока ее модифицируют?