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

C# Discussion :

Problème de Threading(); variable inchangée


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut Problème de Threading(); variable inchangée
    Bonjour,

    Je vous expose mon problème, j'ai un programme qui travaille avec deux thread. Le premier, sert à afficher des positions en temps réel sur une map, et le second écoute une variable ( dont la valeur initiale est à 0) à partir d'une web méthode, de telle façon à ce qu'un évènement soit enclenché lorsque cette variable passe à 1.

    Le problème est que la variable ne veut pas passer à 1 !! ( Alors qu'elle le devrait, d'ailleurs si je travaille sans threading elle passe bien à 1, sous les même conditions).

    Voici le code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
      int StillLookingFor=0;
       public DrivingMode()
            {
                InitializeComponent();
                Coord.ReadCoordinatesFromGPSSimulator2(DriverCoord);
                monThread1 = new Thread(new ThreadStart(ListeningPedestrianThreading));
                monThread2 = new Thread(new ThreadStart(CallPositionsThreading));
                monThread2.Start(); // On lance le thread permettant l'affichage temps réel des positions.
                monThread1.Start(); // On lance le thread de lecture d'évenements. 
           
            }
    
       
           private delegate void ListeningPedestrianThreadingDelegate();
    
            private void UpdateListenerPedestrian()
            {
                if (this.InvokeRequired)
                {
                  
                    this.Invoke(new ListeningPedestrianThreadingDelegate(UpdateListenerPedestrian));
                    return;
                }
    
                PickMeUp_Mobile_BusinessLayers.DrivingMode driving = new PickMeUp_Mobile_BusinessLayers.DrivingMode();
                StillLookingfor = driving.WaitingForSomeoneAskingMe(idMotorist, ref idPedestrian);
     
                // l'indicateur reste à 0!!
                up.Text = "" + StillLookingfor.ToString();
                if (StillLookingfor==1)
                {
                    // Ce bloc n'est jamais exécuté car la variable reste à 0
                    monThread1.Abort(); // On stoppe le thread1
                    monThread2.Abort(); // On stoppe le thread2
                    StartTheSpeech(); // On appelle la méthode StartTheSpeech
                }
               
            }
    
            private void StartTheSpeech()
            {
                
                 txtSpeech.Enabled = true;
                 txtSpeech.Visible = true;
            }
        // Cette partie, concerne le thread qui fonctionne bien
       // celui de l'affichage temps réel des positions, je le mets quand même
    
        private void CallPositionsThreading()
            {
                if (nbr_position < 15)
                {
                    UpdateCarPosition(nbr_position);
                    Thread.Sleep(0);
                }
            }
    
            private delegate void CallPositionsThreadingDelegate(int nbr_position);
            private void UpdateCarPosition(int nbr_position)
            {
                if (this.InvokeRequired)
                {
                    // we were called on a worker thread
                    // marshal the call to the user interface thread
                    this.Invoke(new CallPositionsThreadingDelegate(UpdateCarPosition), new object[] { nbr_position });
                    return;
                }
    
             
                Coord.GetJustOnePosition(positions,DriverCoord,nbr_position);
                DisplayMapFromOneCoord(positions, drivingmodemap.Height, drivingmodemap.Width,500);
         
            }
    Donc les deux thread sont : ListenerPedestrianThreading et CallPositionsThreading, celui qui fonctionne bizarrement est le 1er. ( le second est ok, du moins les positions sont bien affichées comme voulu!)
    La méthode : WaitingForSomeoneAskingMe, fonctionne correctement en principe car comme je l'ai dit précédemment sans multithreading, la variable passait bien à 1.
    Peut être que le traitement est long, et que le thread n'a jamais le temps de lire la variable convenablement?

    Il ya aussi un autre problème au niveau des Abort();, apparemment ils ne fonctionnent pas comme je le pensais, j'ai écrit le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      private void menuItem1_Click(object sender, EventArgs e)
            {
                monThread1.Abort();
                monThread2.Abort();
                Close();
            }
    Pourtant, lorsque je clique sur menuItem1 les thread ne s'arrêtent pas !

    Pourquoi ?

    Je vous remercie pour votre aide
    http://amokrane-chentir.blogspot.com { Software engineering, .NET technologies, Imagine cup..}

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut
    J'ai finalement trouvé, l'origine du problème mon thread n'était tout simplement pas appelé.Il fallait ajouter une boucle for pour qu'il le soit.

    Problème résolu donc. je vais ouvrir un autre topic pour le problème du Abort.
    http://amokrane-chentir.blogspot.com { Software engineering, .NET technologies, Imagine cup..}

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

Discussions similaires

  1. [PERL] problème désallocation de variable
    Par LE NEINDRE dans le forum Langage
    Réponses: 11
    Dernier message: 24/08/2005, 10h07
  2. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  3. Problèmes avec les variables final
    Par casolaro dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2004, 14h29
  4. Réponses: 6
    Dernier message: 28/05/2004, 09h39
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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