In dem Codebeispiel von meinem ersten Post steht in den letzten Zeile
Code:
WaitForSingleObject_(*SHnd,1) : CloseHandle_(*SHnd)
womit es ja auch funktioniert. Schreibe ich aber Debug davor und kompiliere meine Test.exe damit
Code:
Debug WaitForSingleObject_(*SHnd,1) : CloseHandle_(*SHnd)
scheint das wiederrunterzählen der Semaphore beim Schliessen einer Test.exe nicht zu klappen.
Effekt: Ich kann das Programm nur 3x starten, dann muss ich erst *alle* Programmfenster schliessen, sonst gibt es die "zu oft gestartet"-Meldung.
Diese Varianten dagegen funktionieren :
Code:
MessageRequester("Info:", Str(WaitForSingleObject_(*SHnd,0))) : CloseHandle_(*SHnd)
oder
x=WaitForSingleObject_(*SHnd,0) : Debug x : CloseHandle_(*SHnd)
Kann man das irgentwie erklären ?
P.S.: @Danilo
Du hast recht: PrgName.s = "Global\MeinProgramm1.0" macht auch Semaphoren systemweit, funktioniert aber nach ersten Tests nicht bei zwei Usern unterschiedlicher Rechte. (z.B. 1xAdmin, 1xStandard)
Hat einer der beiden eine Instanz offen, kann der andere die Semaphore nicht öffnen oder erstellen. Vielleicht eine Win7 oder UAC Sache, ich weiss es nicht. FYI.