EVENTI





Un evento è la segnalazione di qualcosa che accade, come la pressione di un tasto, lo scadere di un tempo o l’arrivo di un dato da una periferica. In Windows un evento è un oggetto "kernel"  che presenta due stati :

Per creare un evento si usa la funzione CreateEvent:


CreateEvent
  HANDLE CreateEvent
     LPSECURITY_ATTRIBUTES lpEventAttributes,
     BOOL                  bManuealReset,
     BOOL                  bInitialize,
     LPCSTR                lpName    
    )


Se tutto è andato bene CreateEvent restituisce l’handle dell’evento in caso contrario restituisce NULL.
Per attendere il verificarsi di un evento (stato "segnalato" ) si usa come per i semafori la funzione WaitForSingleObject
La funzione restituisce WAIT_TIMEOUT se l’evento non si è verificato entro il timeout specificato, mentre restituisce WAIT_OBJECT_0 se l’evento si è verificato.

Quando l'evento accade si chiama la funzione SetEvent.

                                    BOOL SetEvent ( HANDLE hEvent)

SetEvent  segnala al SO che l'evento si è verificato e questo provoca il ritorno di WaitForSingleObject Se abbiamo scelto il reset manuale (bManualreset = TRUE ) dobbiamo allora chiamare la funzione ResetEvent se vogliamo che l'evento si verifichi nuovamente.

                                    BOOL ResetEvent (HANDLE hEvent)

Se invece poniamo bManualreset = FALSE l’evento, dopo che accade rimane segnalato finchè qualche thread che aspetta non viene rilasciato.  il sistema pone l’evento in stato di non segnalato automaticamente non appena il primo WaitForSingleObject ritorna

Per chiudere un evento si usa CloseHandle .