Empecher un thread de se terminer

Signaler
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
-
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
-
Bonjour a tous,
voila je suis en train de developper une application ou j'affiche l'image d'une webcam... seulement pour ne pas bloquer l'application, je voudrais que tout qui s'occupe de l'affichage de la cam soit lancer dans un thread, seulement mon thread se termine apres, et je perd donc l'affichage de ma cam. Ma question est donc comment empécher qu'un thread se termine?
Bob...

"La chance accorde ses faveur aux esprits avertis..."

9 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Bien que je ne l'ai jamais utilisée, je pense à la fonction
WaitForSingleObject à la fin de ton thread, mais je ne vois pas ce que
ca change. Meme si ton thread ne se termine pas, l'affichage
disparaitra pour la même raison. Il faudrait voir a quoi ressemble ton
thread.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
voila mon thread:

// thread pour l'affiche de la cam
DWORD WINAPI ThreadWebCamProc(
void *)
{
WebCamConnect(Param.x, Param.y, 320, 240);
WebCam.ChooseSource();
WebCam.AfficheWebCam();

return 0;
}

en fait lorsque mon thread se termine, bah l'affichage n'est pu opérationnel... la solution qui me vient donc a l'esprit est d'empecher mon thread de se terminer !
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Ah oui en fait ton image ne s'affiche qu'une seule fois quoi. Tu peux
faire ce que j'ai dire, ou même utiliser une simple variable globale
pour savoir quand le thread doit se terminer:



BOOL bEndThread;



DWORD WINAPI ThreadWebCamProc(void *)

{

WebCamConnect(Param.x, Param.y, 320, 240);


WebCam.ChooseSource();

while(!bEndThread)

{

WebCam.AfficheWebCam();

Sleep(...);

}

return 0;

}



bEndThread est mis à 1 quand le thread doit se terminer. Tu choisis la
valeur que tu mets dans sleep, a mon avis en fonction du taux de
rafraichissement.
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
non ce n'est pas aussi simple que cela !
en fait j'utilise les API pour afficher l'image de la cam, la fonction AfficheWebCam(), ne doit etre appeler que une seul fois, et elle envoie en continue l'image prise par la cam et cela en continue !
Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Dans ce cas la je comprends pas pourquoi le thread se termine (AfficheWebCam est-elle synchrone?)
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
voila le code de la fonction:


// Fonction qui affiche le preview


void CWebCam::AfficheWebCam()
{

// Taille du preview = taille de la résolution
capPreviewScale(hWnd_WC, TRUE);

// Rafraichissement
capPreviewRate(hWnd_WC, 15);

// Affiche
capPreview(hWnd_WC, 1);
}

Bob...

"La chance accorde ses faveur aux esprits avertis..."
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Je pense que je ne peux pas t'aider, je ne connais pas
les fonctions que tu utilises la. Je ne comprends pas comment marche
capPreview. Comment et quand cette fonction se termine-t-elle?
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
salut,

normalement le fait que tu termines ton thread ne devrait avoir aucun
impact sur ton objet webcam... celui ci existant ailleurs que dans ton
thread, il ne va pas se détruire quand ton thread s'arrete.... comment
l'objet webcam peut il se rendre compte de la fin du thread?????

essaye de voir si tu obtiens quelque chose en mettant Sleep(INFINITE); avant ton return 0;

'normalement' ca ne devrait pas regler ton probleme. si ca marche, le
Sleep(INFINITE) est a remplacer par un WaitForSingleObject(hEvent,
INFINITE), ou hEvent est un handle crée avec
CreateEvent(NULL, FALSE, FALSE, NULL); (et dans ce cas tu débloques ton
thread depuis l'exterieur (= un autre thread) en faisant un
SetEvent(hEvent); )



a+
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
11
excuser pour le retard de ma réponse, mais bon c'est les vacances et je decroche un peu du PC :)
effectivement cosmobob l'erreur ne vient pas réellement du thread, en fait je met que le AfficheCam et ca marche très bien la donc voila !
merci pour votre aide sinon et bonne prog a vous !
Bob...

"La chance accorde ses faveur aux esprits avertis..."