Ciao a tutti,
ho uno strano problema con la condivisione di un evento tra diversi threads.
Illustro subito un esempio:
codice:
void main(){
HANDLE killServiceEvent = CreateEvent (0, TRUE, FALSE, _T("NOME_EVENTO"));
if (!killServiceEvent) return;
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) ServiceThread, 0, 0, NULL);
WaitForSingleObject (killServiceEvent,INFINITE)
...
}
void ServiceThread(){
HANDLE killServiceEvent = OpenEvent (EVENT_MODIFY_STATE, FALSE, _T("NOME_EVENTO"));
if (!killServiceEvent) return;
WaitForSingleObject (killServiceEvent,INFINITE); // Non si ferma qui.. perchè?
.....
}
L'esempio è molto semplice: ho un main che crea un evento e si mette in attesa della terminazione del thread e dell'evento (e funziona perfettamente), poi ho un servizio che accede all'evento creato dal main e attende che diventi segnalato (compito che svolge un altro thread su richiesta utente). Il problema è che nel ServiceThread, la funzione WaitForSingleObject non attende quindi non si aspetta che l'evento diventi segnalato.
E' strano perchè l'evento è corretto (se provo a cambiare nome su OpenEvent, killServiceEvent diventa null) e anche se scrivo sul thread:
ResetEvent(killServiceEvent);
WaitForSingleObject (killServiceEvent,INFINITE);
il WaitForSingleObject procede senza problemi.
Ho provato a mettere WaitForSingleObject (killServiceEvent,INFINITE) sul main, subito dopo la creazione.. e lì si blocca tranquillamente quindi funziona.
Spero mi aiutiate.. grazie in anticipo