Unterschied Event - Semaphore



  • Ein Manual Reset Event verhaelt sich gleich wie eine Semaphore?

    HANDLE hEvent = CreateEvent (NULL, false, false, "MyEvent"); // Manual Reset, non-signaled
    HANDLE hSem = CreateSemaphore(NULL, 1, 1, "MySem"); // non-signaled
    
    SetEvent(hEvent)...auf signaled setzen                                              == ReleaseSemaphore(hSem, 1, NULL)...auf signaled setzen
    ResetEvent(hEvent)...auf non-signaled setzen                                        == WaitForSingleObject(hSem, INFINITE)...auf non-signaled setzen
    WaitForSingleObject(hEvent, INFINITE) == Warten bis hEvent signaled ist		    == WaitForSingleObject(hSem, INFINITE) + ReleaseSemaphore(hSem, 1, NULL)
    


  • manual reste ist ja:

    HANDLE hEvent = CreateEvent(NULL, true, false, "MyEvent" );
    


  • korrektur:

    HANDLE hEvent = CreateEvent (NULL, true, false, "MyEvent"); // Manual Reset, non-signaled
    HANDLE hSem = CreateSemaphore(NULL, 1, 1, "MySem"); // non-signaled
    
    SetEvent(hEvent)...auf signaled setzen                                              == ReleaseSemaphore(hSem, 1, NULL)...auf signaled setzen
    ResetEvent(hEvent)...auf non-signaled setzen                                        == WaitForSingleObject(hSem, 0)...auf non-signaled setzen
    WaitForSingleObject(hEvent, INFINITE)...warten bis hEvent signaled ist              == WaitForSingleObject(hSem, INFINITE)...warten bis hSem signaled ist
    

    muesste eigentlich ok sein?



  • irgendwie ist das verhalten doch nicht das gleich:)

    gibt es faelle wo man eine events nicht durch semaphoren ersetzen kann? bei gerade am proggen bei so einer message queue...ich schaff es einfach nicht hier nur sem statt events zu verwenden...immer ein deathlock:/

    cu



  • funktion:
    man definiert zb die message queue mit 10 eintraegen. beim elften write in die queue wird solange gewartet werden bis min 1 eintrag wieder ausgelesen wird.
    und wenn zb 0 eintraege vorhanden sind und dann read aufgerufen wird, muss auch solange gewartet werden bis min einmal write durchgefuehrt wird.


Anmelden zum Antworten