Bonjour,
J'ai une classe dont le constructeur est le suivant:
Cette classe contient une méthode Start dont l'unique but est d'appeler une autre de ses méthodes (ici read_client) dans un nouveaux thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 sub new { my ($self) = @_; my $classe = ref($self) || $self;; my $this = {}; bless ($this,$classe); return $this; }
Mon problème est que la méthode read_client modifie des attributs de l'instance, et que les modifications ne sont pas "remontée" au programme appelant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 sub start { my ($this,$clientSocket) = @_; $this->{clientThread} = threads->create "read_client",$this,$clientSocket); }J'imagine que le problème est du à un mauvais passage de la référence sur l'instante au niveau du thread->create. J'ai bien essayé de passer en paramètre \$this et de récupérer la valeur par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 my $test = TestClass->new(); test->start($socket) ... #fin du thread print $test->{UnAttributModifiéDansLeThread}; #valeure affichée: Pas de modificationMais le résultat est le même...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my ($refThis,$clientSocket)=@_; my $this = $$refThis;
Pourriez vous me débloquer?
Merci de votre aide!!!
Partager