Ciao a tutti,
ho uno strano problema con la condivisione di un evento tra diversi threads.
Illustro subito un esempio:
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.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è? ..... }
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![]()

Rispondi quotando