_Singleton funktioniert manchmal nicht

  • Seit einigen Jahren nutze ich _Singleton um Mehrfachstarts meiner Programme zu verhindern. Funktioniert grundsätzlich. Allerdings ganz selten (und wirklich sehr selten) startet das Programm doch ein zweites Mal. Eine Idee: zu schnell hintereinander geklickt, so dass sOccurrenceName noch nicht hinterlegt ist ...

    Hat jemand eine Idee, wie die Funktion feststellt, dass sOccurrenceName schon existiert? Ich hätte das irgendwo bei den Tasks vermutet, finde aber im Taskmanager nichts. Aber irgendwo muss sOccurrenceName doch abgelegt sein? Vielleicht kann man damit den Fehler tracen?

    Danke für Eure Hilfe!

    :)

  • Allerdings glaube ich nicht, dass man mit dem Codestück herausfinden kann, wo AutoIt sich den Wert "BlpMenuCheck" merkt um ein evt. Timing-Problem aufzuspüren :?:

    :)

  • Hast Du schon mal geprüft ob alle Bedingungen zu _Singleton auch richtig eingesetzt werden?

    Multi user?

    Syntax?

    Vielleicht nochmal in der Hilfe nachlesen?

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Moin,

    _Singleton() versucht, ein eindeutig benanntes Mutex-Objekt zu erstellen. Diese Objekte werden irgendwo in den Tiefen von Windows verwaltet. Die dafür genutzte Funktion CreateMutexW() schlägt fehl, wenn ein Objekt dieses Namens bereits erstellt wurde. AutoIt geht dann davon aus, dass bereits ein anderer Prozess dieses Skript ausführt.

  • Was steht in dieser UDF?

    Wird dort bereits irgendein Code ausgeführt?

    Der würde den _Singleton-Befehl nämlich verzögern.

    Ich habe den Post zur besseren Verständlichkeit stark verkürzt. Tatsächlich gibt es noch mehrere inkludierte UDFs neben den blp_ToolsAllg.au3. Und das sind insgesamt noch mal ca. 4.000 Zeilen. Es werden Variablen deklariert, aber nichts sonst ausgeführt. Würde aufgrund der Größenordnung nichts bringen, alles zu posten. Die Anleitung zu _Singleton ist relativ einfach, in der Hilfe sehe ich nichts was ich nicht gemacht hätte.
    Kann ich den _Singleton eigentlich ganz an den Anfang setzen vor den #Includes? Ein Timing-Problem war ja auch mein erster Gedanke (versehentlich 2x schnell mit der Maus geklickt), speziell da das Problem so extrem selten auftritt und nicht bewusst reproduzierbar ist.

    :)

  • Kann ich den _Singleton eigentlich ganz an den Anfang setzen vor den #Includes?

    Nicht vor allen Includes. "Misc.au3" wird für _Singleton benötigt.

    Aber ich würde es mal so testen:

  • Oscar : danke, Programm umgestellt. Muss mir das in nächster Zeit einfach anschauen, da, wie gesagt, nicht bewusst reproduzierbar.

    Deswegen auch meine Idee, irgendwo nachzuschauen, was die beiden laufenden Instanzen (wenn es mal wieder so ist) bei sOccurrenceName hinterlegt haben. Aber vermutlich wird das nach vorne schieben ja schon helfen.

    :)