Warteschleife spinnt - oder Perl kann nicht zählen...
Tek
- perl
0 Reiner Rusch0 Tek
0 Andreas Bierhals0 Tek
Hallo.
Mal unabhängig vom Programmierstil (ist eh noch Beta), schaut och doch mal bitte das folgende Script an:
Haupt :
$timeout = localtime();
if ($timeout =~ /06:55/ $timeout =~ /06:56/ $timeout =~ /07:/) {
&time_out;
}
sub time_out {
$timeout = localtime();
while ($end ne "1") {
if ($timeout =~ /21:/) { $end = 1; }
else { $timeout = localtime(); $end = 0; }
}
goto Haupt;
}
Nun, das Script sollte sich jedenfalls zu einer bestimmten Uhrzeit (ca 06:55 - 07:00) selbst deaktivieren, bzw in die Timeoutschleife katapultieren.
In der Timoutschleife wird die Uhrzeit 21:00 erwartet, um dann anschließend das Programm wieder erneut zu starten (goto Haupt).
So weit so gut, Das Script startet......läuft durch.......macht und tut....setzt um 07:00 Uhr in die Time_out Schleife aus......und startet 1,5 - 2 Stunden später wieder von neuem ...??Häh?
In 2 Stunden?
Wer kann helfen?
Danke.
Ein Fehler könnte sein, daß wenn $end einmal auf 1 gesetzt wurde, es nie wieder auf 0 kommen kann!
Reiner
Negativ !
Ich habe bereits Wahnvorstellungen. daß ein Perlscript sich nach einer bestimmten Anzahl
gleicher Schleifen killt (oder so) ...
$end kommt mit 0 bereits in die while-Schleife hinein ! Und soll nur einmal auf 1 gesetz werden...aber nicht schon nach 2 Stunden........07 Uhr bis 21 Uhr sind wohl ‚n bisschen mehr!
Ein Fehler könnte sein, daß wenn $end einmal auf 1 gesetzt wurde, es nie wieder auf 0 kommen kann!
Reiner
Wäre es vielleicht eine Lösung, einfach "sleep <sekunden>" zu nutzen?
Hallo,
In der Timoutschleife wird die Uhrzeit 21:00 erwartet, um dann anschließend das Programm wieder erneut zu starten (goto Haupt).
So weit so gut, Das Script startet......läuft durch.......macht und tut....setzt um 07:00 Uhr in die Time_out Schleife aus......und startet 1,5 - 2 Stunden später wieder von neuem ...??Häh?
dazu gleich mal ne Frage: Wie sieht der Time-String aus, den Localtime liefert? Werden nur Stunden und Minuten oder auch noch Sekunden (z.B. gerade "17:11:18") geliefert? Ich vermute mal stark, daß die Sekunden auch mit ausgegeben werden, siehe z.B. <../../tgcl.htm>. Für den Fall versuch ich jetzt mal spaßeshalber, das ganze zu rekonstruieren <g>:
Kann das Deine Beobachtungen erklären?
Viele Grüße
Andreas
FEHLER GEFUNDEN!!!!!
while ($end ne "1") {
if ($timeout =~ /21:/) { $end = 1; }
Hier MÖCHTE ich prüfen, ob es bereits 21:00 Uhr ist....
Na ja, $timeout enthält aber den Wert von localtime()
also
$timeout => Wed 8 Aug 00:00:00 1999
(wobei 00:00:00 der aktuellen Uhrzeit entspricht).
Somit prüft meine Abfrage folgenden:
Entweder 21:00:00 oder 00:21:00
(21: kommt in beiden fällen vor !)
Richtig müßte es also lauten > if ($timeout =~ /21:00:/) { $end = 1; }
...wenn schon 21:00 Uhr!
Trotzdem allen ein Dankeschön!