Seite 2 von 3

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 08.05.2024 21:22
von DarkDragon
jogo hat geschrieben: 08.05.2024 20:55 ab PB 6.10 kannst du mit Mutex = CreateMutex() einen Mutex erstellen. Wenn sich dann beim Doppelstart kein Mutex mit den gleichen Namen erzeugen läßt, weißt du, dass dein Programm bereits geöffnet ist und beendest den Doppelstart sofort.
Probiert habe ich diese Funktion mit PB noch nicht, aber so kenn ich das allgemein von Mutex :)
Das sind eher critical sections und die existieren schon länger. Das ist nur in einem Prozess, sonst müsstest du einen Namen angeben können und CreateMutex hat keinen Parameter.

Was du meinst ist CreateMutex_ und ist Windows only. Das gibts auch schon eine Ewigkeit 😉.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 08.05.2024 23:03
von jogo
ja stimmt - schade, so genau hatte ich noch gar nicht geschaut. Habe das nur unter PB 6.10 im Kapitel Änderungen unter "Hinzugefügt" gelesen und gedacht, dies wäre neu.
Aber in älteren PB Versionen habe ich einen Doppelstart mit der Erstellung eines Netzwerkservers erkannt und verhindert. Diesen Tipp habe ich sogar aus diesem Forum :)
Da man ja nur pro Portnummer genau 1 Server erstellen kann, läßt sich das als Mutex mißbrauchen:

Code: Alles auswählen

If CreateNetworkServer(0, 6107,#PB_Network_UDP,"127.0.0.1") ;wenn mit aktuellen port den server erstellen ok war
    debug "Programm kann gestartet werden"       
Else                ;wenn  kein server erstellt werden konnte
   debug "Programm wurde bereits gestartet"
   end
EndIf    


Funktioniert und geht blitzschnell und nach Programmende wird der Server automatisch beendet.
Mußt natürlich eine Portnummer nehmen, die in freier Wildbahn möglichst nicht vorkommt ;)

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 01:15
von NicTheQuick
CreateMutex() erzeugt keinen globalen Mutex und hilft somit nicht dabei ein Programm daran zu hindern doppelt zu starten. Das ist nur für Threads sinnvoll.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 08:25
von H.Brill
Vielleicht könnte man auch so eine Art Starter-Programm davor schalten, das das eigentliche
Programm mit RunProgramm startet, wenn ProgramRunning() gleich Null ist.

Unter MS-DOS gab es früher solche TSR-Programme (terminate and stay resistent). Die gaben, glaube ich,
eine Meldung aus, wenn sie mehrfach gestartet wurden. Ich hatte so einen Editor namens SIDEKICK,
den man mit den zwei SHIFT-Tasten (rechts und links) hervorholen bzw. verstecken konnte.
Der war damals ideal für meine CLIPPER - Datenbanksprache. Damals mußte man ja noch per
per Einzelbefehlen bzw. Batchdatei compilieren und linken.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 08:46
von mk-soft
Da musst du API nehmen.
Purebasic Mutex ist unter Windows CriticalSection.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 10:17
von PIC18F2550
Ein doppelter Start ist was ganz anderes als wenn ein programm beim beenden neu startet.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 12:04
von H.Brill
Also ich würde das nicht als Konsole - Programm machen, zumal PB zudem kein echtes
MS-DOS Programm erstellen kann.
Console :
Sie sind keine wirklichen MSDOS-Programme!
Ist also auch nur eine Krücke, wie man es in anderen Interpretersprachen auch
häufig findet.

Mach doch ein normales Windowsprogramm.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 09.05.2024 13:20
von PIC18F2550
Das wird zu groß und ich brauch nur eine Ausgabe und eine Any-Key Taste der rest passiert automatisch beim Start.
Des weiteren lässt sich so ein Quelltext leichter auf einen server portieren der keine graphische Oberfläche (Ubuntu) besitzt.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 10.05.2024 08:03
von H.Brill
PIC18F2550 hat geschrieben: 09.05.2024 13:20 Das wird zu groß und ich brauch nur eine Ausgabe und eine Any-Key Taste der rest passiert automatisch beim Start.
Des weiteren lässt sich so ein Quelltext leichter auf einen server portieren der keine graphische Oberfläche (Ubuntu) besitzt.
Das denke ich eher nicht, wenn man schaut, wie wenig du von der GUI brauchst. Ein Fenster, ein Editfeld und einen Button.
Und ob du jetzt aus dem Input() deinen Eingaben rausziehst oder mit GetGadgetText(). Und ein OpenWindow() statt OpenConsole()
zu schreiben, ist ja auch keine Mehrarbeit. Der Rest, wie Schnittstelle einrichten und bedienen, bleibt ja bei beiden Varianten gleich.

Und bei Ubuntu kannst du ja bestimmt auch nicht die Folgebefehle von OpenConsole() 1 : 1 umsetzen.

Re: Compiliertes Programm (exe) startet wieder neu

Verfasst: 10.05.2024 09:15
von PIC18F2550
OpenWindow() wird auf dem Linuxserver bestimmt nicht funktionieren da keine graphische Oberfläche existiert.
Aber das ist ein anderes thema was ich demnächst machen werde.