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 istmuesste 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.