Originariamente inviato da XAlbeX
Neanche io ho capito tanto bene..
Tu vuoi sapere se un evento è settato senza aspettare?
Se è così, basta che gli passi 0 come parametro dwMilliseconds.
ad esempio
codice:// Se entrambi gli eventi non sono settati... if ( WaitForSingleObject(hEvent1,0) == WAIT_TIMEOUT && WaitForSingleObject(hEvent2,0) == WAIT_TIMEOUT ) SetEvent (hEvent1);
si se si ècapito quello che intendevo, scusate ma ero stanco anch'io e non sempre mi riesce di esporre con la dovuta chiarezza, faccio un esempio:
//thread1
WaitForSingleObject(hEvent1,INFINITE);
if(capita qualcosa)
SetEvent(hEvent2); //risveglio il secondo thread
ResetEvent(hEvent1); // metto in attesa il primo thread
//thread2
WaitForSingleObject(hEvent2,INFINITE);
eseguo il compito assegnatomi
SetEvent(hEvent1); //risveglio il primo thread
ResetEvent(hEvent2); // metto in attesa il secondo thread
quando eseguo il thread2 a volte in modo casuale mi ritrovo coi due thread bloccati in WaitForSingleObject() e questo non riesco a spiegarmelo; sarà la solita schedulazione di windows che forse trascorso un certo tempo il SetEvent(hEvent1); non viene più sentito ed entrambi i thread attendono all'infinito.
Per tale motivo chiedevo se c'era un modo di testare la condizione appena esposta e cioè, se trovo entrambi i thread in Wait.....() risveglio uno dei due.
Vale ancora il tuo esempio?
ciao