MAJ du site :
- une navbar en haut, avec notamment un lien vers la chronologie, soit la liste de tous les posts, classés par ordre d’apparition.
- des liens de navigation entre posts, pour passer aux posts précédént/suivant
Contrôler les Threads
Hier on a vu comment créer des Threads, en lancer plusieurs, et les laisser durer le temps de quelques boucles ou pendant un temps bien défini. Là on va voir comment les contrôler, en les arrêtant, les relançant…
pass
Un Thread passe la main à un autre, qui redonne la main au premier.
mon_premier = Thread.new { print "h"; Thread.pass ; print "l"; Thread.pass; print "o" } mon_second = Thread.new { print "e"; Thread.pass ; print "l"; } mon_premier.join → hello
Mon premier Thread affiche “h” puis passe la main à l’autre Thread qui affiche “e”, qui repasse la main au premier… Jusqu’à imprimer “hello”. Je mets “print” au lieu de “puts” pour éviter les retours à la ligne. J’appelle la méthode .join pour que le programme attende que le premier thread soit terminé en entier avant de s’arrêter.
stop / run
On peut arrêter un Thread, pour le relancer plus tard, après qu’une autre action ait été effectuée.
mon_thread = Thread.new do puts "On peut y aller ?" Thread.stop puts "Ok, go!" end puts "Oui c'est bon." mon_thread.run → On peut y aller ? Oui c'est bon. Ok, go!
Ici, en créant mon Thread, j’appelle la méthode .stop sur la classe Thread (et non sur l’instance mon_thread) pour mettre en pause mon instance. On sort ensuite du bloc où j’affiche ma seconde phrase. Et après, je relance mon thread qui affiche la dernière phrase (qui n’avait pas été appelée encore).
exit / kill
On peut arrêter totalement un Thread de l’intérieur (exit) ou de l’extérieur (kill).
attention = Thread.new do while (true): puts "Attention" Thread.pass end Thread.kill(attention) end quoi = Thread.new do puts "Quoi ?" Thread.exit end → Attention Quoi ?
Mon premier thread a une boucle infinie mais heureusement, juste après être sorti du bloc, j’applique la méthode .kill à la classe Thread avec en paramètre le nom de mon thread pour l’arrêter. Mon deuxième thread est lancé, affiche “Quoi ?”, mais juste après (à l’intérieur du bloc) j’appelle la méthode .exit donc elle s’arrête là. Les deux méthodes sont des méthodes de Classe et non des méthodes d’instance.
Flux RSS