Compiliertes Programm (exe) startet wieder neu

Anfängerfragen zum Programmieren mit PureBasic.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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 😉.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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 ;)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
PB 6.10
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag von mk-soft »

Da musst du API nehmen.
Purebasic Mutex ist unter Windows CriticalSection.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
PIC18F2550
Beiträge: 104
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag von PIC18F2550 »

Ein doppelter Start ist was ganz anderes als wenn ein programm beim beenden neu startet.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
PB 6.10
Benutzeravatar
PIC18F2550
Beiträge: 104
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
PB 6.10
Benutzeravatar
PIC18F2550
Beiträge: 104
Registriert: 29.04.2024 09:10
Computerausstattung: Server HP Proliant G7
PC AMD FX(tm)-9590, 64Gb Ram, 2x 2TB Raid5 SAS

Re: Compiliertes Programm (exe) startet wieder neu

Beitrag 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.
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten