Thread nicht-blockierende callback-Subroutine (Tk) (1 answers)
Opened by FoolAck at 2008-05-18 15:35

FoolAck
 2008-05-18 15:35
#109875 #109875
User since
2008-05-02
69 Artikel
BenutzerIn
[default_avatar]
Hi!

Folgendes Beispiel:
Code: (dl )
perl -MTk -e 'MainWindow->new->Button(-command => sub {sleep 10})->pack; MainLoop'

"blockiert" ja immer solange, wie die subroutine wartet. Gibt es eine (einfache) Möglichkeit eine callback-Funktion "non-blocking" zu implementieren? Muss das über threads oder so gehen? (Kenn mich da nicht so aus.)

Ich hab schon von $mw->update() gehört und das klingt eigentlich ziemlich perfekt, aber das könnte ich maximal alle 3-4 Sekunden oder so in der Callback-Funktion aufrufen. Deswegen frag ich hier mal, obs da nicht vielleicht etwas "noch einfacheres" gibt?
So gehts btw scheinbar nicht: (die callback-Funktion blockiert wohl auch repeat..)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use Tk;

my $mw = MainWindow->new();

sub bar {my $mw = shift; $mw->update()}
$mw->repeat(200, [\&bar, $mw]);

$mw->Button(-text => "zZzZz", -command => sub {sleep 10})->pack();

MainLoop();
Während wenn ich $mw->update in der callback-sub direkt aufrufe gehts natürlich, aber wie gesagt, da ist die Auflösung etwas, hm, grob.

ps: {sleep 10} ist natürlich nur ein Platzhalter für die eigentliche (zeitintensive) subroutine.

View full thread nicht-blockierende callback-Subroutine (Tk)