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

Interfaces Graphiques Perl Discussion :

[PERL/TK] Thread et ProgressBar


Sujet :

Interfaces Graphiques Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut [PERL/TK] Thread et ProgressBar
    Bonjour à tous,

    J'ai un petit problème à utiliser un thread pour lancer une progressBar dans une nouvelle fenêtre.
    J'ai lu le très bon tuto sur les applications Multi threading sur ce site, je pense avoir compris les thread mais malheureusement la partie Thread avec ProgressBar n'y est pas.

    Si quelqu'un l'a fait, je pense que cela pourrait m'aider.

    Sinon en fait mon problème et que je lance ma fonction qui réveille mon thread (cela fonctionne bien), ensuite le thread lance bien la bonne fonction donné en paramètre avec les bon argument. Et dans cette fonction je change la valeur de la progressBar pour faire avancer la bar mais il me dit qu'il ne peut pas appeler la méthode "value" (value est utilisé pour donner une valeur a la progressBar):

    Thread 1 terminated abnormally: Can't call method "value" on an undefined value at **** line ***
    Définition du thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my %LesFonctionsALancerDansThread = ( "Transfert" => \&fct_transfert_thread );
    my $TuerThread : shared;          # Permet de tuer le thread proprement
    my $NomFonction : shared;         # Contient le nom de la fonction à appeler
    my $ThreadTravail : shared;       # Contient la valeur permettant au thread de lancer une procédure
    my @ArgumentsThread : shared;     # Contient les arguements à passer à une éventuelle procédure
    my @ResultatFonction : shared;    # Contient le résultat des fonctions lancées dans le thread
     
    $ThreadTravail = 0;               # 0 : thread ne fait rien, 1 : il bosse
    $TuerThread    = 0;               # 0 : thread en vie, 1 : thread se termine
    my $Thread = threads->create( \&NotreThreadUnique ); #creation thread

    Processus qui tourne attendant que le thread se réveille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sub NotreThreadUnique {
     
    	while (1) { # Tourne en rond
    		if ( $ThreadTravail == 1 ) { # demande au thread de travailler
    			$LesFonctionsALancerDansThread{$NomFonction}->(@ArgumentsThread); 	# Lance la procédure
    			$ThreadTravail = 0;	# demande au thread de dormir
    		}
     
    		last if ( $TuerThread == 1 );	# Terminer le thread
     
    		sleep 0.5;
    	}
    	return;
    }

    Fonction qui réveille le thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub fct_lancement_thread{
     
    	my ($taille_file,$taille_dest,$src,$dest,$file) = @_;
     
        $NomFonction = "Transfert";  # On lui indique la procédure à appeler
        @ArgumentsThread = ($taille_file,$taille_dest,$src,$dest,$file);  # On lui donne les arguments
        $ThreadTravail   = 1;   # On lui demande de bosser
    }
    Fonction lancer par le thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub fct_transfert_thread{
     
    	my ($taille_file,$taille_dest,$src,$dest,$file) = @_;
    	my ($overquota_actu,$taillesrc_actu,$tailledest_actu,$soustraction)=(0,0,0,0);
     
    	while ($soustraction<$taille_file) {
    		($overquota_actu,$taillesrc_actu,$tailledest_actu)=fct_calcul_taille("$src$file","$dest");
    		$soustraction=$taille_dest-$tailledest_actu;
    		$progress->value($soustraction) ;
    		$tprogress->update;
    	}
    }

    Appelle de la fonction qui lance le thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fct_lancement_thread($taillesrc,$tailledest,$$ptPATH_RESTORE{$cle},$$ptARG_NAME{$cle},$cle);

    Merci par avance!!

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Bonjour,

    Votre message d'erreur signifie que la méthode value est lancée sur une variable non connue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub fct_transfert_thread{
     
    	my ($taille_file,$taille_dest,$src,$dest,$file) = @_;
    	my ($overquota_actu,$taillesrc_actu,$tailledest_actu,$soustraction)=(0,0,0,0);
     
    	while ($soustraction<$taille_file) {
    		($overquota_actu,$taillesrc_actu,$tailledest_actu)=fct_calcul_taille("$src$file","$dest");
    		$soustraction=$taille_dest-$tailledest_actu;
    		$progress->value($soustraction) ;
    		$tprogress->update;
    	}
    }
    En l'occurrence, $progress n'est pas connue dans cette procédure (surtout si cette dernière est lancée dans un thread). Mais vu que ce sera une variable Tk, je pense que ça posera souci comme je l'ai spécifié dans le tutoriel.

    Inconvénients Perl Tk et Threads

    1. La version actuelle de Perl/Tk (Tk-804.028) n'est pas "thread safe" d'après les auteurs.
    2. L'utilisation des threads avec Perl Tk n'est pas simple.
    3. Le partage des données entres processus légers et/ou script principal n'est pas toujours évident.
    4. Il est recommandé de créer ses threads avant tout code TK et ne pas faire apparaître de code TK dans les threads.
    5. On ne peut donc pas créer des threads à la volée comme bon nous semble via un click bouton.


    Mais néanmoins, je ne vois pas l'intérêt de faire cette barre de progression. Vous pouvez à la place de la barre de progression, mettre un widget label avec l'option -textvariable. Puis à la fin de la tache du thread, mettre à jour cette variable. En jouant également avec des couleurs si vous le souhaitez.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre rapidité!!

    Je ne peux donc pas utiliser les progressBar avec les thread?
    Dans le tuto il est pourtant dit
    Vous pouvez vous inspirer de ces scripts : PerlTkThreadPropreFinal pour l'utilisation des threads et ScriptProgressBar pour l'utilisation des barres de progression.
    Je pense que cela signifie que cela est réalisable mais je n'arrive pas à voir comment sans utiliser de code TK.

    Ensuite même avec les labels je ne vois pas comment je peux faire car je ne veux pas récupérer une valeur a la fin du thread mais plutôt mettre à jour le label tout le long du thread.
    Le thread me sert à récupérer la taille de destination par rapport a la taille du fichier pour voir combien il me reste à transférer et donc faire évoluer la barre de progression jusqu'à la fin de la barre (qui met fin au thread).

    Merci pour votre aide.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Avez réellement besoin d'utiliser les threads dans votre programme ? Quel est le but concret de votre programme ?

    Dans l'article, j'explique comment
    1. soit utiliser uniquement une barre de progression dans son programme
    2. soit utiliser les threads

    Il est possible d'utiliser des threads et barre de progression au sein du même programme, mais impossible d'utiliser des barres de progression à l'intérieur des threads, car perl ne gère pas le partage des variables Tk entre le processus principal et les threads.

    Dans votre cas, si l'objectif est de voir l'état d'avancement de la lecture d'un fichier ou autres tâches, il est plus judicieux de n'utiliser qu'une barre de progression sans s'embêter avec les threads. Nous pouvons vous aider à la faire, mais il faut nous expliquer le but de votre programme.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors je m'explique:

    Je veux utiliser les thread tout simplement pour pouvoir effectuer deux choses en simultané.

    Mon programme permet de faire du transfert de fichier.

    Au moment où l'utilisateur clique sur transférer, le programme principale transfert un fichier d'un point A vers B et le thread doit faire un calcule de taille pour savoir a combien de % en est le transfert et l'affiche sur la progressBar.

    Je ne vois pas comment effectuer ces deux actions en parallèle sans utiliser de thread?

    Merci pour votre aide précieuse! Vous m'évitez de perdre beaucoup de temps!

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Ok, nous avançons déjà un peu. Alors, Comment sont fait les transferts, en FTP ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Alors déjà je suis sous UNIX et je fais du transfert "local" (montage NFS).

    Les transfert sont réalisés grâce à des commandes systèmes du type : CPIO, PAX et DD.

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    ok.
    Dans ce cas, vous n'avez pas vraiment la main sur l'état du transfert, donc il est en effet impossible de n'utiliser que les barres de progression.

    Voici ce que je vous suggère. Gardez votre code avec le thread permettant de lancer les commandes système, mais en enlevant les code Tk

    Pouvez vous nous dire si tout fonctionne déjà ?

    Ensuite, il faudra trouver un moyen autre moyen de lancer fct_calcul_taille pour faire la barre de progression, mais je pense que ce sera très simple.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui dès que j'enlève le code tk dans le thread tout fonctionne. Ma fonction devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub fct_transfert_thread{
     
    	my ($taille_file,$taille_dest,$src,$dest,$file) = @_;
    	my ($overquota_actu,$taillesrc_actu,$tailledest_actu,$soustraction)=(0,0,0,0);
     
    	while ($soustraction<$taille_file) {
    		($overquota_actu,$taillesrc_actu,$tailledest_actu)=fct_calcul_taille("$src$file","$dest");
    		$soustraction=$taille_dest-$tailledest_actu;
    		print("affichage $soustraction\n");
    		#$progress->value($soustraction) ;
    		#$tprogress->update;
    	}
    }

    Mais par contre je ne comprend pas bien pourquoi vous me dites de trouver un autre moyen pour lancer fct_calcul_taille car cette fonction peut être lancer par le thread c'est juste la mise a jour de la progressBar qui ne fonctionne pas.

    Je ne vois pas trop comment contourner cela.

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Bon, je me suis mal exprimé. Le transfert s'effectue dans quelle procédure ? la commande système DD ou cpio, s'effectue où ? dans la procédure fct_transfert_thread ? Ou bien fct_transfert_thread sert elle uniquement à calculer la variation de taille ?

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    La fct_transfert_thread ne sert uniquement à calculer la taille pour pouvoir ensuite l'afficher.

    Les commandes systèmes sont dans le "programme principal".

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Citation Envoyé par remix55 Voir le message
    La fct_transfert_thread ne sert uniquement à calculer la taille pour pouvoir ensuite l'afficher.

    Les commandes systèmes sont dans le "programme principal".
    , là il y a un truc que je ne pige donc pas.
    Vos commandes systèmes s'effectuent déjà dans un autre processus alors, ils ne figent pas votre programme Tk si je comprends bien, ils sont lancés avec l'esperluette c'est ça (&) ?
    Dans ce cas, c'est plus simple que je ne pensais, il n'y a donc pas besoin de faire des threads, mais juste une barre de progression.

    En supposant que vous ayez une barre de progression $progress, il suffit de lancer la procedure fct_transfert_thread (que l'on modifiera comme ci-dessous).

    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
    16
    17
    18
    19
    20
    fct_transfert_thread( $taille_file, $taille_dest, $src, $dest, $file, $progress );
     
    sub fct_transfert_thread {
      my ( $taille_file, $taille_dest, $src, $dest, $file, $progress ) = @_;
     
      # modification de l'option -to de la barre
      $progress->configure( -to => $taille_dest );
     
      my ( $overquota_actu, $taillesrc_actu, $tailledest_actu, $soustraction ) = ( 0, 0, 0, 0 );
     
      while ( $soustraction < $taille_file ) {
        ( $overquota_actu, $taillesrc_actu, $tailledest_actu ) = fct_calcul_taille( "$src$file", "$dest" );
     
        # Evolution de la barre de progression
        $progress->value($tailledest_actu);
        $progress->update;
      }
     
      return;
    }
    Voilà, un petit test pour nous dire si ça fonctionne !!

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Malheureusement, je n'utilise pas le (&) pour lancer mes commandes système car dans mon "programme principal" j'étudie le retour de ces fonctions pour voir si le transfert s'est bien passé ou non et le dire à l'utilisateur...

    Pensez vous qu'il y a tout de même une alternative à mon problème?

    Merci.

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Pourquoi ne pas lancer ces commandes systèmes dans un thread. Il serait ensuite facile de lancer la barre de progression pour étudier les transferts en cours.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui j'y ai déjà pensé, j'attendais de voir si vous aviez une solution plus simple à me proposer car il faut que j'opère de nombreux changements pour cela.

    Mais je vais essayer de ce coté, merci beaucoup pour votre aide.

    Je reviens vers vous pour vous dire si cela fonctionne.

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    si votre code n'est pas long et confidentiel, vous pouvez nous le montrer.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    C'est gentil mais vous m'avez déjà beaucoup aidé, de plus il est assez long et confu pour le moment.

    Encore une petite question:
    J'essaie de faire le transfert par le thread et il me met une erreur sur une table de hash.
    En réalité je voudrais savoir si en argument on peut faire passer des référence sur des tables de hashage?

    L'erreur:
    Thread 1 terminated abnormally: Can't use string ("HASH(0x3d4770)") as a HASH ref while "strict refs" in use at ***** line ***

    Definition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my %LesFonctionsALancerDansThread = ( "Transfert" => \&fct_dump_choix_erase);
    my $TuerThread : shared;          # Permet de tuer le thread proprement
    my $NomFonction : shared;         # Contient le nom de la fonction à appeler
    my $ThreadTravail : shared;       # Contient la valeur permettant au thread de lancer une procédure
    my @ArgumentsThread : shared;     # Contient les arguements à passer à une éventuelle procédure
    my $RefResultatFonction : shared;    # Contient le résultat des fonctions lancées dans le thread
     
    $ThreadTravail = 0;               # 0 : thread ne fait rien, 1 : il bosse
    $TuerThread    = 0;               # 0 : thread en vie, 1 : thread se termine
    my $Thread = threads->create( \&NotreThreadUnique ); #creation thread

    Fonction appeler par le thread (il y a une erreur sur la table $$ptPATH_RESTORE) (incomplet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub fct_dump_choix_erase{
    	my ($ptARG_NAME,$ptPATH_RESTORE,$ERASE,$cle,$directory)= @_;
     
    	chdir("$$ptPATH_RESTORE{$cle}") or die "Impossible d'ouvrir le nearstore"; #on ouvre le bon directory
    }
    Fonction qui tourne en rond:
    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 NotreThreadUnique {
     
    	while (1) { # Tourne en rond
    		if ( $ThreadTravail == 1 ) { # demande au thread de travailler
    			my @Resultat=$LesFonctionsALancerDansThread{$NomFonction}->(@ArgumentsThread); 	# Lance la procédure
    			$RefResultatFonction = shared_clone( \@Resultat);
    			$ThreadTravail = 0;	# demande au thread de dormir
    		}
     
    		last if ( $TuerThread == 1 );	# Terminer le thread
     
    		sleep 0.5;
    	}
    	return;
    }
    Fonction qui lance le thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sub fct_lancement_thread{
     
    	my ($ptARG_NAME,$ptPATH_RESTORE,$ERASE,$cle,$directory) = @_;
     
        $NomFonction = "Transfert";  # On lui indique la procédure à appeler
        @ArgumentsThread = ("$ptARG_NAME","$ptPATH_RESTORE","$ERASE","$cle","$directory");  # On lui donne les arguments
        $ThreadTravail   = 1;   # On lui demande de bosser
     
    	print("coucouc\n");
     
    }

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Ca marchheeeeee!!!

    Bon alors j'ai mis le transfert en thread, cela ne fonctionnait toujours pas (cf. message précédent).
    En réalité pour passer outre cette erreur il fallait que je partage mes variable avec la fonction share().

    Mais il faut faire attention car la fonction share() supprime tout ce qu'il y a dans le scalaire, tableau ou hash. Il faut donc la partager en tout début de programme!

    Donc voila tout marche.
    Merci beaucoup sans vous je serais toujours entrain de mettre mon TK dans le thread!!

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Content que ça fonctionne.
    Eh oui, pour partager des variables, il faut utiliser share ou shared_clone comme expliqué dans la doc.

    Du coup, vous avez fait une barre de progression et tout roule ?

  20. #20
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Oui tout est parfait avec la barre de progression!!!

    Merci encore bonne continuation!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème Thread et progressbar
    Par AnsuzPeorth dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 19/03/2010, 12h56
  2. thread et progressBar sous Visual C++
    Par goingoin dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 19/03/2009, 16h59
  3. Thread et ProgressBar
    Par Jidewe dans le forum VB.NET
    Réponses: 3
    Dernier message: 27/05/2008, 10h04
  4. Background Thread et ProgressBar
    Par bgcode dans le forum VB.NET
    Réponses: 17
    Dernier message: 05/07/2007, 13h30
  5. Réponses: 1
    Dernier message: 22/09/2005, 20h39

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