Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2081 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] plusieurs tie(tableau)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] plusieurs tie(tableau)

n°2116601
Super_caro​tte
Posté le 14-12-2011 à 10:31:22  profilanswer
 

Bonjour,
 
J'ai un probleme avec mes tie() (pour faire de la communication inter-process)
Je n'arrive pas a faire plusieurs tie() dans un même programme.
 
Quand je fais:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data', \%options;
  17. @tabProc_temp=@tabProc;
  18. print "tabProcFini: @tabProcFini\n";
  19. print "tabProcEnCours: @tabProcEnCours\n";
  20. print "tabProc_temp: @tabProc_temp\n";


 
Au lieu d'avoir @tabProcFini vide, @tabProcEnCours vide et seulement @tabProc_temp de renseigné, ils ont tous récupérés la valeur de @tabProc_temp.
 
En effet, le résultat est:

Code :
  1. tabProcFini:
  2. tabProcEnCours:
  3. tabProc_temp:
  4. tabProcFini: Job=HASH(0x91dce78) Job=HASH(0x9224304) Job=HASH(0x91dd070) Job=HASH(0x9217734) Job=HASH(0x91d3118) Job=HASH(0x92180a0) Job=HASH(0x91d7f5c) Job=HASH(0x921506c) Job=HASH(0x91ffd94)
  5. tabProcEnCours: Job=HASH(0x91d7fec) Job=HASH(0x91d7f80) Job=HASH(0x91dd868) Job=HASH(0x92180c4) Job=HASH(0x9200c58) Job=HASH(0x91f40cc) Job=HASH(0x91dd844) Job=HASH(0x91f3850) Job=HASH(0x91ffbf0)
  6. tabProc_temp: Job=HASH(0x92243d0) Job=HASH(0x91dd9d0) Job=HASH(0x92177ac) Job=HASH(0x91f3610) Job=HASH(0x9217c50) Job=HASH(0x9224010) Job=HASH(0x9217788) Job=HASH(0x91d7d28) Job=HASH(0x9217ee4)


 
Donc on voi bien que juste apres le tie(), ils recuperent tous les memes valeures.
 
Avez vous une idée sur la source du probleme?
 
Merci,
Cordialement,
Benjamin.


Message édité par Super_carotte le 14-12-2011 à 10:31:52
mood
Publicité
Posté le 14-12-2011 à 10:31:22  profilanswer
 

n°2116630
gilou
Modérateur
Modzilla
Posté le 14-12-2011 à 12:09:52  profilanswer
 

Il faudrait pas appeller 'data' les 3 zones de mémoire partagée, mais 'dta1', 'dta2' et 'dta3' je pense. (identificateur sur 4 caractères, donc pas data1, data2 et data3)
A+,


Message édité par gilou le 14-12-2011 à 12:10:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2116633
Super_caro​tte
Posté le 14-12-2011 à 12:18:49  profilanswer
 

Merci pour cette réponse,
Je m’étais posé la question et j’avais en effet essayé de changer ce nom mais ça n'a pas résolu le probleme.
 
Avec le code:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data1', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data2', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data3', \%options;
  17. @tabProc_temp=@tabProc;
  18. print "tabProcFini: @tabProcFini\n";
  19. print "tabProcEnCours: @tabProcEnCours\n";
  20. print "tabProc_temp: @tabProc_temp\n";


 
J'ai toujours comme résultat:

Code :
  1. tabProcFini:
  2. tabProcEnCours:
  3. tabProc_temp:
  4. tabProcFini: Job=HASH(0x8f7207c) Job=HASH(0x8f927cc) Job=HASH(0x8f95ad4) Job=HASH(0x8f98d4c) Job=HASH(0x8f9e868) Job=HASH(0x8f996b8) Job=HASH(0x8f95a74) Job=HASH(0x8f9f1f8) Job=HASH(0x8f9f57c)
  5. tabProcEnCours: Job=HASH(0x8f76c2c) Job=HASH(0x8f95c9c) Job=HASH(0x8f99694) Job=HASH(0x8f996dc) Job=HASH(0x8f9f540) Job=HASH(0x8f7c834) Job=HASH(0x8f90984) Job=HASH(0x8fb81f8) Job=HASH(0x8fb8a90)
  6. tabProc_temp: Job=HASH(0x8f92898) Job=HASH(0x8f99634) Job=HASH(0x8f98dc4) Job=HASH(0x8f76a28) Job=HASH(0x8f99268) Job=HASH(0x8f924d8) Job=HASH(0x8f98da0) Job=HASH(0x8f9e6e8) Job=HASH(0x8fb8c28)


 
Le probleme persiste donc.
 
Merci tout de même,
Benjamin

n°2116634
Super_caro​tte
Posté le 14-12-2011 à 12:23:29  profilanswer
 

J'ai également essayé:

Code :
  1. my @tabProc_temp=();
  2. my @tabProcEnCours=();
  3. my @tabProcFini=();
  4. my $i=0;
  5. my %options = (
  6.     create    => 1,
  7.     exclusive => 0,
  8.     mode      => 0644,
  9.     destroy   => 1,
  10. );
  11. print "tabProcFini: @tabProcFini\n";
  12. print "tabProcEnCours: @tabProcEnCours\n";
  13. print "tabProc_temp: @tabProc_temp\n";
  14. tie @tabProcFini, 'IPC::Shareable', 'data1', \%options;
  15. tie @tabProcEnCours, 'IPC::Shareable', 'data2', \%options;
  16. tie @tabProc_temp, 'IPC::Shareable', 'data3', \%options;
  17. (tied @tabProc_temp)->shlock;
  18. @tabProc_temp=@tabProc;
  19. (tied @tabProc_temp)->shunlock;
  20. (tied @tabProcFini)->shlock;
  21. @tabProcFini=();
  22. (tied @tabProcFini)->shunlock;
  23. (tied @tabProcEnCours)->shlock;
  24. @tabProcEnCours=();
  25. (tied @tabProcEnCours)->shunlock;
  26. print "tabProcFini: @tabProcFini\n";
  27. print "tabProcEnCours: @tabProcEnCours\n";
  28. print "tabProc_temp: @tabProc_temp\n";


 
Donc en spécifiant bien l’ouverture et la fermeture des tie avant de les utiliser mais ça ne change rien.

n°2116635
Super_caro​tte
Posté le 14-12-2011 à 12:25:56  profilanswer
 

AU TEMPS (édited   :ange: ) POUR MOI !
Et désolé pour ce multi post.
 
En effet, c'est la subtilité du "4 caractères" que je n’avais pas vu.
 
ça fonctionne mainenant en ayant mis:  

Code :
  1. tie @tabProcFini, 'IPC::Shareable', 'dat1', \%options;
  2. tie @tabProcEnCours, 'IPC::Shareable', 'dat2', \%options;
  3. tie @tabProc_temp, 'IPC::Shareable', 'dat3', \%options;


 
Merci beaucoup,
Bonne continuation,
Benjamin.
 
PS (je ne peux pas passer le suje en résolu car je suis le dernier posteur)


Message édité par Super_carotte le 14-12-2011 à 14:39:23
n°2116642
gilou
Modérateur
Modzilla
Posté le 14-12-2011 à 13:39:42  profilanswer
 

AU TEMPS pour moi! :D http://hfr.toyonos.info/generateurs/nazi/?t=grammar
 
Je m'étais fait initialement avoir moi aussi sur ce coup des 4 caractères en écrivant ma réponse, je ne l'ai vu qu'a la relecture après avoir posté.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] plusieurs tie(tableau)

 

Sujets relatifs
diviser tableau en plusieurs pagesColoration des bords d'une case d'un tableau avec plusieurs couleurs.
plusieurs formulaires dans un tableauRemplir un tableau à plusieurs dimensions
[RESOLU]Plusieurs requetes SQL en une seul sous forme de tableautri de plusieurs tableau
Changer plusieurs images simultanément dans un tableauTableau plusieurs dimensions et chaine de caractères
Tableau multi avec plusieurs donnees[Javascript] Tableau à plusieurs dimensions
Plus de sujets relatifs à : [PERL] plusieurs tie(tableau)


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR