Bonjour. Même si je suis familier avec bash et plus ou moins avec C (raison pour laquelle je me suis dirigé vers Perl), je suis un grand novice par rapport à ce dernier langage, donc je suis désolé si la question peut paraître stupide.
Je suis actuellement en train d'écrire une visionneuse (pour résumer beaucoup) en Perl/Gtk3. Simplement, je me cogne la tête contre les murs depuis quelques jours au sujet de l'ordre selon lequel les commandes sont exécutées. Un petit exemple:
(je n'ai gardé que l'essentiel pour plus de lisibilité).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 sub on_open_archive { my ( $t1, $arkurl ) = @_; print "Ouverture de $arkurl\n"; if ( -f $arkurl ) { $read->show(); $list->hide(); my $ae = Archive::Extract::Libarchive->new( archive => "$arkurl"); my $ok = $ae -> extract( to => "$path/tmp") or die $ae -> error; } }
En gros, le script est censé cacher la liste des archives à ouvrir et afficher le widget permettant d'afficher les images, puis ensuite extraire l'archive (et éventuellement afficher par la suite les images extraites, même si ce n'est pas dans ce code).
Simplement, il se passe l'inverse. Le programme freeze pendant l'extraction de l'archive (normal), et n'exécute les fonctions hide et show qu'après son extraction (pas logique du tout selon moi).
J'ai testé dans d'autres contextes, avec toujours le même résultat. Par exemple, si j'appelle une fonction qui va changer l'image d'un GtkImage suivi d'un sleep (pour le test), le sleep est exécuté avant le $widget->set_from_pixbuf($img).
Quelqu'un saurait m'expliquer ce phénomène?
Partager