Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7298[/thread]

Methodenaufrufe & sleep()

Leser: 1


<< >> 10 Einträge, 1 Seite
pktm
 2005-09-20 22:21
#58293 #58293
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Wenn folgender Code aufgerufen wird,
Code: (dl )
1
2
3
4
5
while( 1 ){
$mw->update(); #1
$loopMethode->(); #2
sleep(3); #3
}


Dann wird doch auf jeden Fall zuerst Schritt 2 ausgeführt - welcher sich in mehrere Methodenaufrufe splittet - bevor das Programm schläft - oder?
Ich hatte nämlich den Eindruck, dass es das Programm schläft, obwohl Schritt 2 noch g arnicht fertig war.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2005-09-20 22:24
#58294 #58294
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ja und nein;
wenn in #1 und #2 z.B. gethreaded wird, dann kehren die funktionen schon vorher zurück, bevor die eigentliche arbeit erledigt wurde
J-jayz-Z
 2005-09-20 22:38
#58295 #58295
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Und wenn ich mir die Variable $mw ansehe, dann solltest du kein sleep nutzen. Wenn es ein Tk Programm ist, dann bleib die GUI eingefroren. Nutze Tk::sleep
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub Tk::Widget::tk_sleep {
#Parameter aus subaufruf sichern
my($main, $s) = @_;
#Variable deklarieren
my $sleep_dummy = 0;
#Tk::after aufrufen und die Anzahl der übergebenen Zahl
#mal 1000 nehmen, da ein after Aufruf mit 1000 ziemlich genau
#eine Sekunde ist. Nach Ablauf dieser Zeit wird die Variable
#sleep_dummy durch ihre Inkrementierung auf 'true' gesetzt.
$main->after($s*1000,
sub { $sleep_dummy++ });
#Der normale Scriptablauf wird hinausgezögert, bis
#die Variable sleep_dummy 'true' ist
$main->waitVariable(\$sleep_dummy)
unless $sleep_dummy;
}
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
pktm
 2005-09-22 19:52
#58296 #58296
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, ob das funktioniert habe ich noch nicht getestet, aber eingebaut ist es schonmal :-D
Das sleep() fiel nicht so sonderlich in die Waage, da das Programm ohnehin immer einfriert, während es die Methode ausführt.
Diese enhält nämlich aufgrund diverser HTML-Parsing-Operationen einige while-Scheifen.
Habe mittlerweile mal veruscht es in POE zu überführen, aber um das richtig zu machen bräuchte ich mehr (Frei-)Zeit.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-09-22 19:57
#58297 #58297
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
und threads verwenden? musst halt den thread starten, bevor du irgendwas mit Tk machst (also auch nicht use Tk; sondern nach erzeugung des threads require Tk; und Infos nur ueber shared variables austauschen ...)\n\n

<!--EDIT|Strat|1127404686-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-09-22 20:08
#58298 #58298
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, nicht hauen, aber das war mir bislang fremd. Das geht mit welcher Funktion?
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-09-22 20:27
#58299 #58299
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
perldoc threads
perldoc threads::shared
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-09-22 20:33
#58300 #58300
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Sieht auf Anhieb ein bischen einfacher aus als POE.
Werde mal ein bischen Freizeit organisieren :-)
http://www.intergastro-service.de (mein erstes CMS :) )
Weman
 2005-09-23 10:36
#58301 #58301
User since
2005-08-10
17 Artikel
BenutzerIn
[default_avatar]
Hallo,

mit $mw->after(3000); friert ja trotzdem das Fenster ein!!!

Ich habe eine Funktion und in der nutze ich sleep(3); weil ich nicht so schnell Daten zu einer Maschine schicken kann!

Kann man das einfrieren irgendwie umgehen???

Vielen Dank!
pktm
 2005-09-23 14:12
#58302 #58302
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
[quote=Strat,22.09.2005, 18:27]perldoc threads
perldoc threads::shared[/quote]
siehe hier ;-)
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 10 Einträge, 1 Seite



View all threads created 2005-09-20 22:21.