Bonjour,
J'ai un objet A qui crée plusieurs objets B (dans des threads).
Dans ces objets B il y a une fonction Process possédant une boucle infinie qui lit une table en BDD.
J'aimerais stopper cette boucle depuis l'objet A vers ses objets B à la réception d'un signal.
J'ai donc ajouté un attribut dans la classe B : stopped. A la réception du signal je boucle sur mes objets B et je change la valeur de stopped, et j'ai modifié ma boucle infinie pour l'arrêter lorsque stopped est à 1.
Mais ça ne marche pas, la boucle ne s'arrête pas..
Est-ce parce que j'initialise $this, qui possède bien sûr stopped à 0 au début de fonction et qui ne change pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sub Process { my $this = shift; while(!$this->{stopped}) { ... } }
J'ai également testé en enlevant cet attribut et mettant une variable globale dans ma classe B :
J'appelle la fonction Stop sur chacun des objets B depuis A, mais ça ne change rien, le print m'affiche 0...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 our $bStopped = 0; sub Stop { $bStopped = 1; } sub Process { my $this = shift; while(!$bStopped) { print $bStopped; ... } }
Est-ce que parce que j'appelle la fonction Process de mes objets B dans un thread ? Ou peut être un problème de références, je ne sais pas..
Ma question est donc, comment faire, si possible proprement, pour changer cette valeur dans chaque objet et qu'elle soit prise en compte dans la fonction ?
Merci beaucoup !
Partager