Aktuelle Zeit: 08.08.2020 14:11

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zu "Nur eine Instanz erlauben"
BeitragVerfasst: 20.06.2019 14:46 
Offline

Registriert: 06.03.2019 21:52
Tach allerseits!

Habe eine Verständnisfrage zum Beitrag https://www.purebasic.fr/german/viewtopic.php?f=16&p=260173#p260173

Hier hat PureLust einen Beitrag von mk-soft folgendermaßen zusammengefasst:
Code:
Global g_hMutexAppRunning

Procedure AppInstanceExists()
   Protected bAppRunning = FALSE;
  g_hMutexAppRunning = CreateMutex_( #Null, #Null, "Global\MyApplication1");
  If (g_hMutexAppRunning <> #Null) And (GetLastError_() = #ERROR_ALREADY_EXISTS)
    CloseHandle_( g_hMutexAppRunning );
    g_hMutexAppRunning = #Null;
  EndIf
  If g_hMutexAppRunning
    ProcedureReturn #False;
  Else
    ProcedureReturn #True
  EndIf
EndProcedure

If AppInstanceExists()
  MessageRequester("Info", "Programm läuft bereit - zweite Instanz wird beendet.")
  End
Else
  MessageRequester("Info", "Programm läuft noch nicht - dies ist die erste Instanz.")
EndIf

; !!! NICHT VERGESSEN !!! - Global Mutex wieder freigeben
CloseHandle_(g_hMutexAppRunning)

Hier wird am Ende "CloseHandle_(g_hMutexAppRunning)" aufgerufen, weil das nicht vergessen werden dürfe, ist aber in der "IF-Abfrage" der Procedure auch schon drin. Muss das Handle 2x geschlossen werden?

edit:
Und: Wird das "Global g_hMutexAppRunning" überhaupt in dieser Zusammenfassung benötigt?

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu "Nur eine Instanz erlauben"
BeitragVerfasst: 20.06.2019 14:58 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
bin_neu_hier hat geschrieben:
Hier wird am Ende "CloseHandle_(g_hMutexAppRunning)" aufgerufen, weil das nicht vergessen werden dürfe, ist aber in der "IF-Abfrage" der Procedure auch schon drin. Muss das Handle 2x geschlossen werden?

Es wird in beiden Szenarien die Handle-Nummer jeweils einmal freigegeben.

Fall 1:
Programm wird gestartet und es wird festgestellt, dass das Programm noch nicht läuft.
Zeile 7 zum Freigeben der Handle-Nummer wird nicht ausgeführt, weil GetLastError_() = 0 ist.
So lange die Anwendung läuft, wird nichts freigegeben. Wenn die Anwendung beendet wird, wird zum Schluss die Handle-Nummer freigegeben. Siehe Zeile 25.

Fall 2:
Programm wird gestartet und es wird festgestellt, dass das Programm bereits läuft.
Zeile 7 zum Freigeben der Handle-Nummer wird ausgeführt, weil GetLastError_() = #ERROR_ALREADY_EXISTS ist.
Da danach #True zurückgegeben wird, wird in Zeile 19 das Schlüsselwort End zum sofortigen Beenden ausgeführt und kommt nicht weiter zur Zeile 25.

bin_neu_hier hat geschrieben:
Und: Wird das "Global g_hMutexAppRunning" überhaupt in dieser Zusammenfassung benötigt?

Diese Variable brauchst du zum Schluss noch, wenn dein Programm beendet wird, um die Handle-Nummer freizugeben. Ist also nur für den Fall 1 notwendig.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu "Nur eine Instanz erlauben"
BeitragVerfasst: 20.06.2019 15:07 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
@RSBasic:
Das wichtige ist die Überprüfung des Fehlers: GetLastError_() = #ERROR_ALREADY_EXISTS

Du sagst gerade, das zwei verschiedene Dinge passieren, obwohl der Grund der gleiche ist. :wink:
RSBasic hat geschrieben:
Zeile 7 zum Freigeben der Handle-Nummer wird nicht ausgeführt, weil g_hMutexAppRunning nicht Null ist.
<snip>
Zeile 7 zum Freigeben der Handle-Nummer wird ausgeführt, weil g_hMutexAppRunning ungleich Null ist.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu "Nur eine Instanz erlauben"
BeitragVerfasst: 20.06.2019 15:32 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
NicTheQuick hat geschrieben:
Du sagst gerade, das zwei verschiedene Dinge passieren, obwohl der Grund der gleiche ist. :wink:

Ups, danke für den Hinweis. Ich habe meine Erklärung angepasst.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu "Nur eine Instanz erlauben"
BeitragVerfasst: 20.06.2019 22:39 
Offline

Registriert: 06.03.2019 21:52
... und schon wieder etwas mehr Licht im Dunkel.

Besten Dank!

_________________
Der beste Fisch ist der Schnitzel


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye