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:
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:
Code:
this->BeginInvoke(...)
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:
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:
Code:
Application::DoEvents
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!