Alte Skript instanzen stoppen beim Aufrufen

Hallo zusammen,

eine Kurze Frage: Wie kann ich es erreichen, dass beim Skriptaufruf die alten derzeit ausgeführten Instanzen des Skripts sofort beendet werden?

Danke und Gruß, Tim

Moin Tim!

Wenn ich dich richtig verstehe, dann ist das nicht möglich.

Aber beschreib doch bitte noch mal genauer was du machen möchtest und warum du es machen möchtest, dann findet sich bestimmt eine andere Lösung :slight_smile:

Grüße,
Chris

Eine kurze Antwort: durch Setzen und Abfragen von Semaphoren.

Aber „sofort“ funktioniert das auch nicht, sondern erst wenn das Skript den entsprechenden Semaphor abgefragt und sich entsprechend dem Resultat selbst beendet hat.

Viele Grüsse
Harald

Danke für die schnelle Antwort. Ich steuere ein Lichtmanagementsystem mitteln cURL an um Szenen aufzurufen. Drückt man den Tatser, der triggert mehrfach, soll das „alte“ skript nicht mehr ausgeführt werden, sondern nur noch das aktuelle, das durch den letzten Tastendruck ausgelöst wurde.

Hängt damit zusammen, dass ich mit dem Taster toggle, quasi mehrere Szenen der Reihe nach durchschalte.

Ok, verstehe, ich hab den Fall bei mir auch…aber „andersrum“ gelöst. Ich blockiere so lange die erneute Ausführung des Skriptes, bis die vorherige Szene fertig ist.

Also wenn ich auf TV drücke, muss ich so lange warten bis alles entsprechend geschaltet wurde von IPS und erst dann kann ich auf PS4 drücken und IPS schaltet dann alles so, dass die PS4 läuft.

Und ein cURL-Aufruf dauert noch nur wenige ms im Normalfall, was willst du da abbrechen?

Was du noch machen kannst, mit Semaphore arbeiten. Dann ist immer nur ein cURL-Aufruf gleichzeitig möglich und der eine kann sich nicht vor den anderen schieben, sondern es wird brav gewartet bis die Semaphore wieder offen/frei ist und dann wird der nächste cURL-Aufruf hinterher geschickt.

Grüße,
Chris

Prima, danke ich probier es mal mit

if(!IPS_SemaphoreEnter($_IPS['SELF'], 1 /* sehr kurz warten */)) {
 return; //Läuft bereits
}

Da fehlt noch das LEAVE, sonst wird immer so lange gewartet, wie die Zeit die hinter der Semaphore angegeben ist und dann erst freigegeben.

if (IPS_SemaphoreEnter("cURL_Lichtsteuerung", 5000)) {   // max. 5 Sekunden warten auf freie Semaphore, sonst ELSE und Ende
    // Hier dein cURL-Aufruf
    IPS_SemaphoreLeave("cURL_Lichtsteuerung"); 
}
else {
    echo "Konnte Semaphore nicht betreten";
}

Grüße,
Chris