2010-09-17 2 views
2

Si je CreateEvent pour ouvrir un événement:L'utilisation de CreateEvent pour créer/ouvrir un même qui existe déjà réinitialiser le signal?

responseWaitEvent = CreateEvent(NULL,  // no security 
    TRUE,  // manual-reset event 
    FALSE,  // not signaled 
    (LPTSTR)eventName); // event name 

Et cet événement existe déjà et a été signalé. Cet appel réinitialisera-t-il le signal (en raison du réglage de l'état initial sur FALSE)?

Ou bien quitter immédiatement l'attente lorsqu'il est appelé:

if (responseWaitEvent) 
{ 
    DWORD dw = WaitForSingleObjectEx(responseWaitEvent, m_ResponseTimeoutMillis, FALSE); 

Répondre

3

Le deuxième appel ouvrira l'événement, il ne changera pas l'état de l'événement. Je sais cela parce que la documentation dit qu'elle l'ouvre mais pas qu'elle le réinitialise. Si elle le réinitialisait, ce serait assez important pour le mentionner.

HANDLE responseWaitEvent = CreateEvent(NULL,  // no security 
    TRUE,  // manual-reset event 
    TRUE,  // signaled 
    (LPTSTR)_T("TESTEvent")); // event name 
    assert(responseWaitEvent && "Could not create event"); 

responseWaitEvent = CreateEvent(NULL,  // no security 
    TRUE,  // manual-reset event 
    FALSE,  // not signaled 
    (LPTSTR)_T("TESTEvent")); // event name 

    assert(responseWaitEvent && "Could not open event"); 

DWORD dw = WaitForSingleObjectEx(responseWaitEvent, 10000, FALSE); 
assert(dw != WAIT_TIMEOUT); 

Et le contraire:

HANDLE responseWaitEvent2 = CreateEvent(NULL,  // no security 
    TRUE,  // manual-reset event 
    FALSE,  // not signaled 
    (LPTSTR)_T("TESTEvent2")); // event name 
    assert(responseWaitEvent && "Could not create event"); 

responseWaitEvent2 = CreateEvent(NULL,  // no security 
    TRUE,  // manual-reset event 
    TRUE,  // signaled 
    (LPTSTR)_T("TESTEvent2")); // event name 
    assert(responseWaitEvent && "Could not open event"); 

DWORD dw2 = WaitForSingleObjectEx(responseWaitEvent2, 10000, FALSE); 
assert(dw2 == WAIT_TIMEOUT); 
+0

Et l'attente va quitter immédiatement parce que l'événement a déjà été signalé, correct? – Mike

+0

@Mike: Yup dans l'exemple 1 ci-dessus, il reviendra instantanément, dans l'exemple 2, il attendra 10 secondes puis reviendra. –

Questions connexes