Thread qui ne se termine pas !

Signaler
Messages postés
80
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
30 mars 2007
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Hello !!

j'ai un petit probleme. je crée des threads dans un progamme C sous visual c++ express edition sans MFC.

Mais voila, je n'arrive pas a les arreter !!

Voila mon code :


hThreads[threadNumberEnExecution].thread = CreateThread(NULL,0,graph2,(LPVOID)threadNumberEnExecution,0,NULL);

...


if
(!GetExitCodeThread(hThreads[threadNumberEnExecution].thread, (LPDWORD)&exitCode))
MessageBox(hwnd,"terminé", "impossible d'obtenir un code de destruction du thread", MB_ICONQUESTION);


if(!TerminateThread(hThreads[threadNumberEnExecution].thread, exitCode))
MessageBox(hwnd,"terminé", "impossible de terminer le thread", MB_ICONQUESTION);

quelqu'un voit il le probleme ??

Merci d'avance !

7 réponses

Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
ton thread retourne bien 0x0 quand tu as fini l'action???





je dev pas windows, mais sous wx il faut un return NULL; ou return 0x0; pour arreter le thread.



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
Messages postés
80
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
30 mars 2007

En fait, sous windows, un return NULL indique une erreur.. Mais je ne comprend pas laquelle... Quelles peuvet etre les raisons de cette echec ??

Merci pour ton aide !
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
est-ce que tu as la possibilité de Tester le destruction, sous widgets

if( TestDestroy() ) return NULL;



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
Messages postés
80
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
30 mars 2007

Non, je ne crois pas que cela existe... ou alors je ne connais pas. Je débute dans l'API windows, alors c'est un peu laborieux !!

En fait, lorsque je cré mon thread, je met le Handle dans un des champs d'une stucture. Lorsque je desire effectuer la meme operation que le thread précédent avant que ce dernier ne soit arrété, j'arrete le thread précédent et je relance un nouveau thread contenant la meme fonction. Mais le thread n'a pas l'air de s'arreter et lorsque je créé le nouveau thread qui effectue la meme action, je ne fais que copier le nouveau handle dans ma structure a la place de l'ancien ! Tout marche bien mais je sais pas si c'est tres bon d'avoir 36 thread dont je ne connais pas l'etat...

J'espere que tu me suis... c'est pas facile a expliquer !
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Pour terminer un thread "sauvagement" c'est TerminateThread. Sinon, ta routine soit en effet retourner NULL. Et n'oublie pas qu'il faut fermer le HANDLE avec CloseHandle.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Que se passe-t-il si tu attend la fin du thread via
WaitForSingleObject(hThreads[threadNumberEnExecution].thread,INFINITE); ?
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Et bien dapprais ce qu'il dit, il va attendre très longtemps.

___________________________________________
Les plus grands esprits trouvent toujours une solution