Anzahl gleichzeitiger Starts eigener Programme beschränken
Verfasst: 07.04.2012 01:31
Hallo.
Die Lösung um die eigene EXE nur einmal starten zu können kennt man ja (CreateMutex_() usw.)
Ich bauchte aber etwas, um dem DAU bei Bedarf die Ausführung von z.B. drei Instanzen zu erlauben, aber eben auch nicht mehr -
falls derjenige mal den Überblick verloren hat.
So folgend (als konstruiertes Beispiel) habe ich es dann gelöst:
Frage1: Ist das so ok, oder kann man das besser lösen ?
Frage2: Kann ich den aktuellen Zählerstand der Semaphore ermitteln? (Für Info im Fenster wieviele Programminstanzen laufen z.B.)
Die Lösung um die eigene EXE nur einmal starten zu können kennt man ja (CreateMutex_() usw.)
Ich bauchte aber etwas, um dem DAU bei Bedarf die Ausführung von z.B. drei Instanzen zu erlauben, aber eben auch nicht mehr -
falls derjenige mal den Überblick verloren hat.

So folgend (als konstruiertes Beispiel) habe ich es dann gelöst:
Code: Alles auswählen
PrgName.s = "MeinProgramm1.0"
#MaxRunning = 3
*SHnd = OpenSemaphore_(#SEMAPHORE_ALL_ACCESS,0,@PrgName)
If *SHnd = #Null Or GetLastError_() <> 0
MessageRequester("Info:", " OpenSemaphore failed!" +Chr(13)+Chr(13) + " Erstelle jetzt neue Semaphore ...." )
*SHnd = CreateSemaphore_(#Null,0,#MaxRunning-1,@PrgName)
If *SHnd <> 0 And GetLastError_() = #ERROR_ALREADY_EXISTS
MessageRequester("Achtung:", " Konnte Semaphore nicht erstellen!")
CloseHandle_(*SHnd) : End
EndIf
Else
If ReleaseSemaphore_(*SHnd,1,#Null) = 0 ; Semaphore +1
MessageRequester("Achtung:", " Dieses Programm wurde schon zu oft gestartet!")
CloseHandle_(*SHnd) : End
EndIf
EndIf
; ----------------------------------------------------------------------------
hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,200,100,"Test - " + Str(#MaxRunning) + " instances allowed")
TextGadget(0,10,10,100,20,"Hallo")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
WaitForSingleObject_(*SHnd,1) : CloseHandle_(*SHnd)
End
Frage2: Kann ich den aktuellen Zählerstand der Semaphore ermitteln? (Für Info im Fenster wieviele Programminstanzen laufen z.B.)