IPS multitasking fähig?

Hi!
hab mal ne Frage zur Verarbeitung der PHP Scripts innerhalb von IPS.

Ich bräuchte die Programmierung einer Aktion, wo man z.B. einen Aktor zu Beginn startet und dann nach z.B. 5 min. wieder abschaltet.

Wenn IPS multitasking macht, würde man einfach innerhalb des scripts
eine variable
$var1 = time();
setzen und dann solange in schleife abfragen (polling), bis time() - $var1 groesser als die gewünschte zeit ist.
frage ist nun: wie wird das in IPS gehandelt: kann ips durch ein solches script vollkommen blockiert werden, oder werden eben mehrere tasks in parallel verarbeitet und ein solches script blockiert nicht IPS?
Oder gibt es einen befehl, der innerhalb der schleife dann kurzzeitig die kontrolle an IPS zurückgibt?
Oder wie soll man sowas in IPS in script am besten umsetzen?
danke!!!

Dafür nimmt man einen Scripttimer. Schleifen innerhalb eines Scripts sind nicht gut. Threads können max 10 gleichzeitig laufen.

Mal als Beispiel mit diversen Ausführungen.

<?
switch($IPS_SENDER)
{
    case "Execute": // im Sript ausführen. Simuliert Button im Webfront
   break;
   case "TimerEvent":
   if($IPS_EVENT == 58305 /*[Test\2Timer\]*/) // ID des Scripttimer
   {
      //TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Ausgeschaltet" , true);
      IPS_LogMessage($IPS_SELF, "Aus"); // Ausgabe in Meldungen
      SetValue(33476 /*[Test\2Timer\Script gesperrt]*/, false); // Script freigeben
       IPS_SetScriptTimer($IPS_SELF, 0);
       return;
    }
   break;
}

if(GetValue(33476 /*[Test\2Timer\Script gesperrt]*/)) // Script Freigabe prüfen, wenn true verlassen
{
   IPS_LogMessage($IPS_SELF, "Script ist gesperrt");
    return;
}
else // sonst ausführen
{
    //TTS_Speak(28627 /*[Sprachausgabe\Text To Speech]*/, "Eingeschaltet" , true);
    IPS_LogMessage($IPS_SELF, "Ein"); // Ausgabe in Meldungen
    SetValue(33476 /*[Test\2Timer\Script gesperrt]*/, true); // Script sperren
    IPS_SetScriptTimer($IPS_SELF, 10);
}


?>
switch($IPS_SENDER)
{
    case "Variable":                              
   if(($zaehler == 0) && (IPS_GetScriptTimer($IPS_SELF) == 0))
   {                                           
        IPS_SetScriptTimer($IPS_SELF, 60);
      SetValueInteger(39466 /*[Test\zähler]*/, 1);
    }
   else
   {
      SetValueInteger(39466 /*[Test\zähler]*/, $zaehler + 1);
    }
   break;
    case "TimerEvent":
    if($zaehler >= 15)
    {
       // mach Radau..............
    }
    else
    {
       SetValueInteger(39466 /*[Test\zähler]*/, 0);
       IPS_SetScriptTimer($IPS_SELF, 0);
    }
    break;
}
FS20_SwitchMode(24367 /*[Test\FS20 SA Umschalter]*/, true);
IPS_SetScriptTimer($IPS_SELF, 10);

switch ($IPS_SENDER)
{
    case "TimerEvent":
      FS20_SwitchMode(24367 /*[Test\FS20 SA Umschalter]*/, false);
      IPS_SetScriptTimer($IPS_SELF, 0);
      break;
}