Hallo, betrifft Perl / speziell das TK-Modul. Mit "MainLoop();" werden die Perl/TK-Befehle eines Scripts ausgeführt, und das Script befindet sich daraufhin sozusagen in einer "Endlosschleife" und wartet auf einen entsprechenden Mausklick (Reaktion) durch den Benutzer, bevor der nächste Scriptbefehl ausgeführt wird. Wenn der Benutzer keine Eingabe (Mausklick o.ä.) macht, dann soll sich das Script (Prozeß) aber nach einer bestimmten Zeit (automatisch) selbst beenden. Also sich sozusagen bei einem "Timeout" (bei Inaktivität des Benutzers) beenden. Die Perl-Bücher, die ich mir bisher angesehen habe geben zur Komponente TK nur ungenügend Auskunft. Wer weiß Rat und kann mich aus der "MainLoop-Schleife" befreien? : ) Ralph (Susi7.0/Perl5) -- GMX - Die Kommunikationsplattform im Internet. http://www.gmx.net
Hallo Ralph
Mit "MainLoop();" werden die Perl/TK-Befehle eines Scripts ausgeführt, und das Script befindet sich daraufhin sozusagen in einer "Endlosschleife" und wartet auf einen entsprechenden Mausklick (Reaktion) durch den Benutzer, bevor der nächste Scriptbefehl ausgeführt wird.
Wenn der Benutzer keine Eingabe (Mausklick o.ä.) macht, dann soll sich das Script (Prozeß) aber nach einer bestimmten Zeit (automatisch) selbst beenden. Also sich sozusagen bei einem "Timeout" (bei Inaktivität des Benutzers) beenden.
Die Perl-Bücher, die ich mir bisher angesehen habe geben zur Komponente TK nur ungenügend Auskunft.
Wer weiß Rat und kann mich aus der "MainLoop-Schleife" befreien? : )
##############und da gehts los: var tmStop=time()+3600; #sekunden nach jetzt while(tmStop>time()) { #da steht irgend ein code }; ##############und tschüß... viel spaß kurt
Hallo Kurt, hallo Ralph, On Mon, 02 Apr 2001, Kurt Weiß wrote:
Mit "MainLoop();" werden die Perl/TK-Befehle eines Scripts ausgeführt, und das Script befindet sich daraufhin sozusagen in einer "Endlosschleife" und wartet auf einen entsprechenden Mausklick (Reaktion) durch den Benutzer, bevor der nächste Scriptbefehl ausgeführt wird.
Wenn der Benutzer keine Eingabe (Mausklick o.ä.) macht, dann soll sich das Script (Prozeß) aber nach einer bestimmten Zeit (automatisch) selbst beenden. Also sich sozusagen bei einem "Timeout" (bei Inaktivität des Benutzers) beenden.
Die Perl-Bücher, die ich mir bisher angesehen habe geben zur Komponente TK nur ungenügend Auskunft.
Wer weiß Rat und kann mich aus der "MainLoop-Schleife" befreien? : )
##############und da gehts los:
var tmStop=time()+3600; #sekunden nach jetzt
while(tmStop>time()) { #da steht irgend ein code };
##############und tschüß...
Wenn ich das richtig verstehe, dann wird Deine Loesung, Kurt, auf alle Faelle nach 3600s das Programm beenden, egal ob der User noch Eingaben macht, ob gerade was laeuft, oder aehnliches - oder habe ich das falsch verstanden? Wenn ich richtig liege, dann glaube ich, dass Ralph etwas anderes sucht: Er moechte das Programm ja nur abbrechen, wenn kein Event eintritt, falls irgendetwas laeuft, darf das Programm nicht abbrechen. Wenn der Benutzer quasi 3 Minuten sich nicht ruehrt, dann soll das Programm beendet werden. Kurts Loesung liesse sich AFAIK in Perl/Tk einfach mit my $id = $mw->after($time,sub{exit}); schreiben, wenn $mw das MainWindow ist und in $time die entsprechende Zeit in Millisekunden steckt, nach der das Programm beendet werden soll. Allerdings kenne ich keine Loesung fuer Ralphs Problem, so wie ich es verstehe. Es gibt zwar die Moeglichkeit, my $id = $mw->afterIdle(sub{exit}); zu benutzen, dann verabschiedet sich das Programm aber sofort im zweiten Durchlauf des MainLoops, falls kein Event eingetreten ist. Da ein Benutzer natuerlich nicht so schnell reagieren kann, beendet sich das Programm quasi immer sofort wieder. Eine andere Moeglichkeit bestuende in der Benutzung des Moduls "Event", das arbeitet laut Autor aber (noch) nicht mit Perl/Tk zusammen, da es selbst einen EventHandler mitbringt und der sich mit MainLoop von Perl/Tk nicht so ganz vertraegt. Ich wuesste jetzt nicht, wie o.a. Problem direkt in Perl/Tk auf einfache Weise zu loesen ist..... By the way, ein gutes Buch zu Perl/Tk gibt es beim O'Reilly Verlag, es heisst "Einfuehrung in Perl/Tk", kann ich eigentlich nur empfehlen - zum Einarbeiten und Lernen der elementaren Dinge ist das ziemlich gut. Gruesse, Thomson -- Dipl.-Geophys. Thomas Hertweck Geophysikalisches Institut, Universitaet (TH) Karlsruhe Email: ubtj@rz.uni-karlsruhe.de Linux is like a wigwam - no windows, no gates, apache inside!
Hallo Kurt, hallo Ralph, Hallo!
Wenn der Benutzer keine Eingabe (Mausklick o.ä.) macht, dann soll sich das Script (Prozeß) aber nach einer bestimmten Zeit (automatisch) selbst beenden. Also sich sozusagen bei einem "Timeout" (bei Inaktivität des Benutzers) beenden.
...
var tmStop=time()+3600; #sekunden nach jetzt
while(tmStop>time()) { #da steht irgend ein code };
##############und tschüß...
Wenn ich das richtig verstehe, dann wird Deine Loesung, Kurt, auf alle Faelle nach 3600s das Programm beenden, egal ob der User noch Eingaben macht, ob gerade was laeuft, oder aehnliches - oder habe ich das falsch verstanden? Wenn ich richtig liege, dann glaube ich, dass Ralph etwas anderes sucht: Er moechte das Programm ja nur abbrechen, wenn kein Event eintritt, falls irgendetwas laeuft, darf das Programm nicht abbrechen. Wenn der Benutzer quasi 3 Minuten sich nicht ruehrt, dann soll das Programm beendet werden.
naja, nachdem $tmStop eine globale variable ist, kann ich ja beim abarbeiten des Events jedesmal tmStop=time()+<zeitzumwarten> hineinschreiben... das kann man natürlich sauberer lösen: ################################################### $secondsToLive=3600; sub SetTimeOut { $tmStop=time()+$secondsToLive; } while($tmStop > time()) { ###### und so weiter } sub OnMouseEvent { &SetTimeOut(); } ################################################### aber wie wir wissen, "alle wege führen nach rom" (zumindest jedoch die A13 ;-) gruß kurt
participants (3)
-
Kurt Weiß
-
Ralph Mueller
-
Thomas Hertweck