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++/CLI Discussion :

Stopper un thread après un certain temps


Sujet :

C++/CLI

  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Stopper un thread après un certain temps
    Bonjour,

    Je suis face à un gros problème. J'ai un thread dans lequel je capture des images à une cadence fixe (30 ms). Voici sa structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void MyThread(void)
    {
       Create();
     
       while(StopThread_b == false)
       {
          Capture(...);
          UpdateInterface(...); /* frame number, etc */
       }
     
       Destroy();
    Pour démarrer ou stopper celui-ci j'ai respectivement les fonctions StartThread et StopThread.

    Mon problème:
    Je veux stopper la capture après un certain temps. J'ai donc créé un timer qui met la variable StopThread_b à true après x millisecondes.
    C'est là qu'est mon problème parfois ma thread se coupe parfois pas! En effet pour mettre à jour mon interface (principalement des labels), j'appelle mes fonctions de manière asynchrone via des delegate:
    Pour éviter les surcharges, je récupère un IAsyncResult depuis la méthode BeginInvoke pour mettre un délai maximum au traitement de la mise à jour de mon interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IAsyncResult^ tag = this->BeginInvoke(...);
    tag->WaitHandle->WaitOne(50, true);
    On dirait que c'est là qu'est mon problème quand le timer est déclenché et qu'il stoppe le thread, mon interface continue de se mettre à jour... En fait on dirait que mon programme est en train d'afficher toutes mes appels asynchrones qui étaient pending... Comment les annuler?

    J'ai bien essayé d'utiliser un:
    mais ça ne résoud pas le problème.

    le Thread->Abort fonctionne mais je préférerai éviter vu que je dois bien m'assurer de tout nettoyer à la fin du thread (Destroy).

    Il doit bien y avoir une solution!

  2. #2
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Ok, j'ai finalement trouvé... Enfin, je pense avoir éliminé le problème car le problème n'est plus réapparu depuis que je ne fais plus appel à:
    dans une fenêtre de log...

    Cette fonction traite tous les messages Windows présents dans la file d'attente de messages. On dirait que tous mes appels asynchrones sont alors appelés, sans vraiment tenir compte de leur time out ...

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

Discussions similaires

  1. PC qui rame apres un certain temps
    Par sovo dans le forum Ordinateurs
    Réponses: 9
    Dernier message: 26/07/2006, 17h04
  2. Apache devient inacessible après un certains temps ?
    Par Quality_Design dans le forum Apache
    Réponses: 6
    Dernier message: 19/02/2006, 22h09
  3. Ouvrir un popup après un certain temps
    Par Oberown dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/11/2005, 17h06
  4. Comment fermer une popup après un certains temps ?
    Par magic8392 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/10/2005, 12h06
  5. Ouvrir une fenêtre et la fermer après un certain temps
    Par MiJack dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2005, 17h16

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