IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[perl][up] passer des references entre thread


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut [perl][up] passer des references entre thread
    Bonjour.
    J'ai un petit souci avec un serveur tcp. Nous avons créer une file d'attente de connexion de client. A chaque nouveal connection, nous sauvegardons l'bojet dans un tableau. c'est la que se situe le probleme. Si on fait un push d'une valeur texte, ca se passe sans probleme, mais des que nous faisons un push sur l'objet client, il ne sauve rien dans un tableau. Comment faire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #Attende d'un client
    my $client;
    if($client = $server->accept())
    {
                    print Dumper ($client); # on voit la valeur de hash
     
    	push @TAB_SOCKET, $client;
    	print Dumper (@TAB_SOCKET);	# rien du tout
     
    }
    Si a la place de $client, nous mettons "lol", ca ne pose aucun prob.

    COmment sauvegarder $client???????

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    J'envisagerais deux solutions, au moins (mais aucun n'est testée ...).



    Bien sûr, ce type de solution ne convient pas nécessairement à tous les objets, mais c'est déjà un début.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    merci pour ta réponse, mais la solution 1 ne marche pas, et la 2 ne m'avance pas. En fait le code que j'ai mis est celui du thread principal.

    La variable tableau est en share, et a chaque fois que un push est fait dans celui-ci, un 2eme thread récuupere la valeur comme suit :

    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
     
    sub Thread
    {
    	while (1)
    	{
    		foreach my $temp (@TAB_SOCKET)
    		{
    			print Dumper (@TAB_SOCKET);
    			print "debut\n";
    			shift (@TAB_SOCKET);
    			sleep (1);
    			#Traitement ($temp);
    		}
    	}
    }
    donc pas besoin du fichier. Le seul probleme que j'ai c'est dans le code principal, apres le push de l'objet $client, il n'y a rien dans la tableau, et $client ne contient plus rien non plus.

    Le probleme vient pe d'une reference, mais je debute encore en perl donc si vous pouviez m'éclairer...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    Petit up : je me suis rendu compte que le probleme ne vient pas du tableau mais du partage de celui-ci pour les thread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    share(@TAB_SOCKET);
    si j'enleve la ligne du partage, mon thread ne sait plus lire le tableau, mais la valeur est sauve dans le thread principal. Y a t-il une autre solution pour partager le tableau

  5. #5
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Citation Envoyé par zeroox
    Petit up : je me suis rendu compte que le probleme ne vient pas du tableau mais du partage de celui-ci pour les thread.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    share(@TAB_SOCKET);
    si j'enleve la ligne du partage, mon thread ne sait plus lire le tableau, mais la valeur est sauve dans le thread principal. Y a t-il une autre solution pour partager le tableau
    Je n'ai jamais travaillé sérieusement avec des threads, mais un truc me chagrine ...

    Peut on réellement stocker, dans un tableau partagé, des références à des objets qui ne sont pas partagés ? Il me paraîtrait légitime que non, ce qui explique que tes objets ne soient plus visibles après ...

    Il est peut être possible de déclarer $client comme étant partagée aussi, non ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    g essayer aussi, mais ca ne marche pas, mm en envoyant directement client.

    Y a t-il d'autre chose que share pour partager entre des thread

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    On ne peut pas partager des objets entre plusieurs threads, le support des threads en Perl est très expérimental et peu recommandé.
    A la place, il vaut mieux utiliser des systèmes tel que POE.

    --
    Jedaï

Discussions similaires

  1. [WinForms]Comment partager des objets entre threads ?
    Par AiSpirit dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  2. Faire passer des items entre deux zones de listes
    Par ludobado dans le forum Access
    Réponses: 8
    Dernier message: 04/05/2006, 18h33
  3. Perl - C : Passer des args a une fonction C
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 01/05/2006, 10h35
  4. [Données]Passer des données entre applet et Servlet
    Par CheryBen dans le forum Applets
    Réponses: 11
    Dernier message: 16/09/2005, 13h48
  5. Réponses: 7
    Dernier message: 30/12/2004, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo