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

Windows Forms Discussion :

variable garde sa valeur initiale


Sujet :

Windows Forms

  1. #1
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut variable garde sa valeur initiale
    Bonjour,
    Veuillez examiner ce code avec moi, et me dire pourquoi la variable var garde sa valeur initiale apres l'avoir modifiée dans un thread !
    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
    21
    22
    23
    24
    25
    26
    class MyClass
    {
    	private Thread th1;
    	private Thread th2;
     
    	private int var;
     
    	public static main()
    	{
    		th1 = new Thread(new ThreadStart(funTh1));
    		th1.Start();
    	}
     
    	private void funTh1()
    	{
    		var = 1;
    		th2 = new Thread(new ThreadStart(funTh2));
    		th2.Start();
    		////NORMALEMENT SUR CETTE LIGNE : var = 2 !! ce qui n'est pas le cas !
    	}
     
    	private void funTh2()
    	{
    		var = 2;
    	}
    }

  2. #2
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    C'est normal, ton thread est lancé en parallèle.
    Au moment où tu demande la valeur de ta variable, le thread 2 n'a pas encore été lancé, ou n'a pas fini son traitement...

    Pour avoir le résultat que tu veux, il faut procéder ainsi

    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
     
    private void funTh1() 
    { 
     
        var = 1; 
     
        th2 = new Thread(new ThreadStart(funTh2)); 
     
        th2.Start(); 
     
        while (th2.ThreadState != ThreadState.Stopped) { 
     
            // Attend la fin du thead 
     
        } 
     
        Console.WriteLine(var); 
     
    }
    Mais dans ce cas, je ne vois pas l'intérêt d'un thread...


  3. #3
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    je suis d'accord avec toi, mais même si on attend la fin du deuxieme thread le resultat est toujours le même

  4. #4
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Citation Envoyé par subzero01 Voir le message
    je suis d'accord avec toi, mais même si on attend la fin du deuxieme thread le resultat est toujours le même
    Non, je crois pas, essaye mon exemple ...

  5. #5
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    desolé mais deja testé et pas de resultat

  6. #6
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    pour te rassurer que c'est pas le cas d'une attente validation de l'affectation, quand je verifie la valeur (avant affectation) de 'var' dans le thread 2 (a l'aire du débuggeur) ca devrait donner var=1 (puisque var a été affectée avant par la valeur 1) ce qui est pas le cas !!!

  7. #7
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Oui, ...
    Cela dépend ou tu testes ta valeur ... ralalala ... les threads ...

    Tu as 3 niveaux de Thread

    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
     
    > Thread 0
    Var = 0
    > Thread 1
    Var = 1 dans thread 1 
    Var = 0 dans thread 0
    > Thread 2
    Var = 2 dans le thread 2
    Var = 1 dans le thread 1
    Var = 0 dans le thread 0
    > Fin thread 2
    Var = 2 dans le thread 1
    Var = 0 dans le thread 0
    > Fin thread 1
    Var = 2 dans le thread 0
    Attend la fin de ton thread 1 pour avoir ta valeur...

  8. #8
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    le probleme principale d'où j'ai inventé cette solution (qui me semble compliquer mieux les choses !!) c'est que la variable var est une chaine qui doit attendre un StreamReader.ReadLine() qui peut ne pas finir de s'executer !!
    alors j'ai mis cette affectation dans le th2 et j'attends la fin de son exec pour l'utiliser ensuite...
    mais je pense que de cette facon je m'en sortirai pas

  9. #9
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Oui, mais alors pourquoi passer par un thread si tu dois attendre la fin de lecture... ??

  10. #10
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    car le readline() ne se termine plus !! et le thread1 reste planté a cette ligne.

  11. #11
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Si le thread 2 ne termine pas son traitement, il est normal que le thread 1 ne se termine pas non plus.
    Que veux-tu faire exactement avec ta variable ? je comprends pas.

    Edit : Je repose ma question qui n'est pas clair :

    Que veux-tu faire si le thread 1 ne se termine pas ?

  12. #12
    Membre très actif Avatar de subzero01
    Inscrit en
    Décembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Décembre 2007
    Messages : 281
    Par défaut
    j'ai resolu le probleme en deplacant le tout d'un niveau en haut
    merci pour ton assistance

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

Discussions similaires

  1. Valeur initiale, modification de variable
    Par marioBross2 dans le forum Débuter
    Réponses: 2
    Dernier message: 05/05/2009, 02h15
  2. Couleur de cellule variable suivant une valeur
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/03/2006, 09h04
  3. Comparaisons de variables et récup valeur mini
    Par pegase23 dans le forum Access
    Réponses: 4
    Dernier message: 02/01/2006, 12h36
  4. [MySQL] select et valeur initiale
    Par dleu dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 18/11/2005, 23h16
  5. [JOptionPane.showInputDialog] Valeur initiale + titre
    Par yanndublanche dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 03/08/2005, 15h43

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