NEWS
Wie paralleles Ausführen verhindern?
-
Hallo Community,
ich habe in einem Script mehrere Trigger. Ich möchte jedoch verhindern, dass verschiedene Trigger mehrere Instanzen des Scripts parallel starten. Wenn eine Script-Instanz bereits läuft und ein weiterer Trigger auslöst, so soll keine neue Script-Instanz gestartet werden.
Wie kann man das umsetzen?
Danke und Gruß
somethingcreator -
@somethingcreator hallo,
zeige doch mal bitte das Script. normalerweise wird das Script nur einmal gestartet bei auslösen eines Triggers. sind ja "oder" Auslöser. -
@somethingcreator sagte: ein weiterer Trigger auslöst, so soll keine neue Script-Instanz gestartet werden.
Es werden keine Skript-Instanzen neu gestartet, sondern die Trigger werden in der Reihenfolge ihres Auftretens innerhalb des Skriptes ausgelöst und die jeweils programmierten Aktionen ausgeführt.
Soll der zuerst auftretende Trigger das Auslösen weiterer Trigger innerhalb einer bestimmten Zeit verhindern, dann muss man eine Timer-Sperre verwenden. Prinzip:EDIT: Liefern die Trigger-DP zeitlich zusammenhängende Werte (aus einer Instanz), die ausgewertet werden sollen, muss man auf den letzten Trigger warten.
-
danke für die Hinweise. Ich verstehe nun die Funktionsweise der Script-Ausführung besser. Ich habe auch nun eine Lösung mit einer Sperrvariable, die auf ersten Blick gut funktioniert. Startet das Script, wird die Sperrvariable auf "true" gesetzt. Nach Beendigung auf "false". Alle Trigger-Auslösungen bei "true" werden abgebrochen.
-
@somethingcreator Könntest du bitte dein Skript zeigen!
Es kommt ja vielleicht auf Feinheiten an, ob und was geblockt werden muss -
@homoran
Hier zwei Trigger als Beispiele, es gibt noch mehr
Hier die Logik beim Start der Hauptroutine:
Hier wird die Sperre nach Ausführung aufgehoben.
-
@somethingcreator sagte in Wie paralleles Ausführen verhindern?:
Hier zwei Trigger als Beispiele, es gibt noch mehr
gut dass du es zeigst!
das ist ja was anderes!du hast zwei unabhängige Skripte, die die selbe Funktion aufrufen in einem Blockly.
Also nicht zwei triggernde Datenpunkte an einem Skript
-
@homoran ich habe noch weitere triggernde Datenpunkte. Kannst Du bitte erklären, was jetzt anders ist bei der Ausführung je Trigger? Es ist mir klar, dass die Lösung nicht ganz robust ist. Wenn sich z.B. das Setzen der Sperrvariable verheddert, wird das Script nicht laufen. Ist aber erstmal der Anfang. Kann man es besser/anders lösen?
-
@somethingcreator sagte: Kann man es besser/anders lösen?
Wozu soll der 5-Minuten-Trigger gut sein?
Übrigens: Eine Funktion ohne Timer wird nicht durch einen neuen Trigger unterbrochen, sondern sie wird bis zu Ende ausgeführt, bevor der neue Trigger sie erneut startet. -
@paul53 sagte in Wie paralleles Ausführen verhindern?:
Übrigens: Eine Funktion ohne Timer wird nicht durch einen neuen Trigger unterbrochen, sondern sie wird bis zu Ende ausgeführt, bevor der neue Trigger sie erneut startet.
Das kann ich in meinen Tests nicht bestätigen. Jeder Trigger ob Timer oder Datenpunkt lässt die Hauptroutine sofort starten. Unabhängig davon, ob diese zu Ende gelaufen ist.