Veröffentlicht 26. Oktober 200618 j Hallo an alle, ich wage mich an Semaphoren ran. Ich möchte den Zugriff auf einen externen Prozess auf drei begrenzen. Ist nachfolgendes soweit richtig? 1. Initialisierung: HANDLE semProzess=CreateSemaphore(NULL, 0, 3, "ProzessName"); 2. Zum besitzen oder bei erreichen von 3 warten: WaitForSingleObject(semProzess, INFINITE); 3. Freigeben, hier weiss ich nicht so recht: ReleaseSemaphore(semProzess, ?, ?); 4. Schliessen: CloseHandle(semProzess); IDE:WinXP Pro SP2, VS 2003.NET, C++, MFC, Dialog.
26. Oktober 200618 j Der "Zähler" der Semaphore gibt sozusagen die Anzahl der noch verfügbaren Zugriffe wieder. Deine Semaphore ist damit von Anfang an blockiert, weil dein Startwert Null ist. Üblicherweise ist der Startwert beim Erzeugen genauso groß wie der Maximalwert.
26. Oktober 200618 j Autor Zu 3. habe ich folgendes: ReleaseSemaphore(semProzess, 1, NULL); Die 1 bedeutet, dass der Zähler um 1 runtergezählt wird.
26. Oktober 200618 j Die 1 bedeutet, dass der Zähler um 1 runtergezählt wird.Nein, der Zähler wird um eins hochgezählt. Der Zähler gibt wieder, wie oft du warten kannst, bevor die Semaphore blockiert. Jeder erfolgreiche Wartevorgang verringert den Zähler, jedes Freigeben erhöht ihn wieder.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.