suche etwas änlich delay

Hallo,

ich suche einen Befehl (delay) ähnlich wie er in anderen Programmiersprachen verwendet wird.
Also ich möchte das er in der Schleife/Skript solange hängen bleibt bis die Zeitabglelaufen ist, und erst dann weiter abarbeitet.

Möchte es auch nicht über Microtime machen würde schon gerne delay nutzen wollen.

Grüße
Meinhard

Hallo,

sleep() oder IPS_Sleep() dürfte das richtige sein.

Hallo Meinhardt,

was bezweckst Du denn genau damit? Ich wuerde das so nicht machen, weil Du Dir damit mit Sicherheit Probleme schaffst. Ich glaube, Du kannst hier bestimmt die Sache auch anders loesen.

Gruss Torro

Siehe auch:
http://www.php-homepage.de/manual/function.sleep.php

Wie Torro aber auch schon richtig bemerkt hat, ist mit diesen Befehlen vorsichtig umzugehen, weil sie die Laufzeit aller anderen Scripte unter Umständen beeinflussen.

Moin Matrose,

du meinst eine Ein oder Ausschaltverzögerung oder?

Ich habe da mal was entworfen was sicher zu umständlich ist und verbessert werden kann, aber bei mir funzt es. Ich frage da z.B. die Öffnung meines Heizventils ab und wenn es eine gewisse Zeit über einen bestimmten Wert steht schalte ich ein Flag damit ein. Dieses Flag mußt du dann in einem anderen Script welches die Ausschaltbedingung beiinhaltet wieder zurücksetzen.

<?
/*


IP-SYMCON Event Scripting


File : Hzg_Einschaltverzoegerung_HV.ips.php
Trigger : OnChange „Hzg_Flag_HV“ = Eingangsvariable
Interval :
*/

$sn = „Hzg_Einschaltverzoegerung_HV“;//Scriptname
$azv = 600; // Einschaltverzoegerung in Sekunden
$in1 = GetValueBoolean(„Hzg_HV_Flag“); //Ausgangsvariable
$in2 = GetValueBoolean(„Hzg_Flag_HV“); // Eingangsvariable
$st = IPS_GetScriptTimer($sn); // Scriptname
$z = GetValueInteger(„EVZ_Zaehler_HV“);
$z = $z + 1;
If (($z > 2) or ($in2 == false)){
$z = 0;
IPS_SetScriptTimer($sn,0);
}
If (($in1 == false) and ($in2 == false)){
SetValueInteger(„EVZ_Zaehler_HV“,0);
} else {
SetValueInteger(„EVZ_Zaehler_HV“,$z);
}

If (($st == 0) and ($in2 == true) and ($in1 == false)){
IPS_SetScriptTimer($sn,$azv);
}

If (($z >= 2) and ($in1 == false)){
IPS_SetScriptTimer($sn,0);
SetValueBoolean(„Hzg_HV_Flag“, true);
SetValueInteger(„EVZ_Zaehler_HV“,0);
}
If ($in1 == true){
SetValueInteger(„EVZ_Zaehler_HV“,0);
}
?>

Probiers mal aus :wink:

Gruß
Thomas

Matrose,

  1. Wenn dein script langer dann (hilfe ??) 10s braucht bekommst du ein script time-out fehler, und wird das script möglichst in die mitte abgeschnitten… mit alle frustrationen („wieso lauft das verflixtes script nicht“) zu folge!

Besser mal gleich den vorschlag von MSR_J durch arbeiten. Das ist die richtige lösung.

  1. IPS kann in sein multi-tasking bis zu 10 simultane scripts laufen lassen. Durch deine sleep() befehl wird einem thread genutzt. Also auf diesem moment noch 9. Gibt es mehrere anrufen simultan, könnte es schon mal passieren das IPS ohne freie threads kommt. Und dann gibt es Spaghetti :eek: lekker :smiley:

@GGGss

Zitat von PHP Manual
Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running.

Wobei die Scripttimerlösung natürlich die elegante Lösung darstellt und der sleep() Befehl nicht überstrapaziert werden sollte.

Aber solange matrose nicht genauer schreibt was er machen will sind das alles nur Spekulationen.

Dieser Thread befasst sich näher mit sleep. Pro und Contra, Gefahr und Wirkung.

Toni

Danke, Gefahr verstanden.

(Bin am testen, hab es jetzt anders realisiert.)