si tu boucle tu ne laisse plus Tk gerer ses evenements (rafraichissement, etc...)
bon deja dans ta boucle tu n'a pas à remettre le texte en permanance, il te suffit de trouner dans le vide:
Code :
- $message->configure(-text => "Attente" );
- 1 while ( -z "result.txt" );
- $message->configure(-text => "Ok" );
|
ensuite si tu faix ca tu va utiliser 100% de ton CPU à tourner comme un fou pour pas grand chose. Donc tu peux deja ajouter des petites pauses:
Code :
- $message->configure(-text => "Attente" );
- while ( -z "result.txt" ) {
- select(undef,undef,undef, 0.01);
- }
- $message->configure(-text => "Ok" );
|
le select(undef,undef,undef, 0.01) va simplement faire une pause de 0.01 seconde
ensuite il faudrait que tu permete à Tk de gerer ses evenements pendant que tu boucle:
Code :
- # $mw = fenetre principale
- $message->configure(-text => "Attente" );
- while ( -z "result.txt" ) {
- select(undef,undef,undef, 0.01);
- $mw->update;
- }
- $message->configure(-text => "Ok" );
|
et ensuite, le fin du fin serais de ne pas avoir de boucle mais de demander à Tk de gerer cette attente lui meme, avec ses timer:
Code :
- # $mw = fenetre principale
- $message->configure(-text => "Attente" );
- my $timer;
- # toutes les 100ms, ca doit deja largement suffire
- $timer = $mw->repeat(100, sub{
- if (not -z "result.txt" ) { # ou if -s...
- $timer->cancel; # on cancel le timer pour ne plus qu'il tourne
- $message->configure(-text => "Ok" );
- ...
- }
- });
|