Win 7 mal 64, Visual Studio Gemeinschaft 2015, C++Win32 Events - Ich muss benachrichtigt werden, wenn das Ereignis gelöscht wird
Ich habe einen Thread, die ich brauche/unpause zu pausieren oder beenden, die ich zur Zeit tun mit manuelles Zurücksetzen der Ereignisse "run" oder "kill" Die Schleife im Thread pausiert jedes Mal für 5000ms.
Mein Ziel ist es, in der Mitte des Wartens warten zu können oder den Thread zu beenden.
Das Problem ist die Art, wie ich es derzeit eingerichtet habe, ich muss benachrichtigt werden, wenn das Ereignis "run" in den nicht signalisierten Zustand geht, aber es gibt keine Möglichkeit, dies zu tun, es sei denn, ich erstelle ein Ereignis mit die umgekehrte Polarität, aber das scheint wie ein Klud. Kurz gesagt, ich brauche ein pegelempfindliches Signal, nicht kantenempfindlich.
Vielleicht sollte das Ereignis nur den Laufstatus wechseln?
Dies ist die Thread-Funktion:
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;
}
Eine Zustandsvariable funktioniert hier möglicherweise besser. –