Win 7, x64, Visual Studio Community 2015, C++Win32 События - Мне нужно, чтобы получить уведомление, когда событие очищается
У меня есть поток, который мне нужно сделать паузу/возобновлять или прекратить, что я в настоящее время сделать с событиями «запустить» или «убить» вручную. Цикл в потоке приостанавливается каждый раз на 5000 мс.
Моя цель состоит в том, чтобы иметь возможность прекратить ждать или убить нить, находясь в середине ожидания.
Проблема заключается в том, как я ее настроил, мне нужно получить уведомление, когда событие «запустить» переходит в состояние без сигнализации, но нет способа сделать это, если я не создаю событие с перевернутая полярность, но это похоже на клочок. Короче говоря, мне нужен чувствительный к уровню сигнал, а не чувствительный к регистру.
Возможно, событие должно просто переключать состояние запуска?
Это функция потока:
DWORD WINAPI DAQ::_fakeOutFn(void *param) {
DAQ *pThis = (DAQ *)param;
const DWORD timeout = 5000;
bool running = false;
HANDLE handles[] = { pThis->hFakeTaskRunningEvent, pThis->hFakeTaskKillEvent };
do {
DWORD result = WaitForMultipleObjects(2, handles, FALSE, INFINITE);
switch (result) {
case WAIT_OBJECT_0: // Run started or continued
running = true;
pThis->outputIndex++;
if (pThis->outputIndex >= pThis->numSamples)
pThis->outputIndex = 0;
// Wait here
// Not sure how to cancel this if the TaskRunningEvent goes false during the wait
DWORD result2 = WaitForMultipleObjects(2, handles, FALSE, timeout);
// Check result2, and 'continue' the loop if hFakeTaskRunningEvent went to NON-SIGNALLED state
break;
case WAIT_OBJECT_0 + 1: // Kill requested
running = false;
break;
default:
_ASSERT_EXPR(FALSE, L"Wait error");
break;
}
} while (running);
return 0;
}
Здесь может быть улучшена переменная состояния. –