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!