Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3943 connectés 

 


Dernière réponse
Sujet : [VISUAL C++] Fermeture prématurée d'un thread
guillot Merci beaucoup !
 
Je vais tenter de voir ça !
en fait je n'ai pas pu tester TerminateThread() vu qu'il demande le CD3 de la MSDN et je n'ai que le 1 et 2 :=)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
guillot Merci beaucoup !
 
Je vais tenter de voir ça !
en fait je n'ai pas pu tester TerminateThread() vu qu'il demande le CD3 de la MSDN et je n'ai que le 1 et 2 :=)
verdoux Ton thread peut vérifier régulièrement l'état d'une variable et agir selon cet état.
 
Sinon il y a la fonction TerminateThread:
http://msdn.microsoft.com/library/ [...] d_7h2c.htm
 
Mais MS avertit:
"TerminateThread is a dangerous function that should only be used in the most extreme cases."
 
"Warning  The TerminateThread and TerminateProcess functions should be used only in extreme circumstances, since they do not allow threads to clean up, do not notify attached DLLs, and do not free the initial stack. The following steps provide a better solution:
 
- Create an event object using the CreateEvent function.  
- Create the threads.  
- Each thread monitors the event state by calling the WaitForSingleObject function. Use a wait time-out interval of zero.  
- Each thread terminates its own execution when the event is set to the signaled state (WaitForSingleObject returns WAIT_OBJECT_0).  
"

 

[edit]--Message édité par Verdoux--[/edit]

guillot A vrai dire, on m'a toujours déconseillé de faire ainsi !
Mais dans mon cas, je ne vois pas comment faire autrement.
 
En fait cette idée de terminer un thread prématurément est venue du fait que je souhaitais faire un client FTP en Visual C++ et que j'aurais aimé que l'utilisateur puisse annuler un téléchargement.
Mon téléchargement se fait dans un thread, et le seul moyen que je connaisse pour le stopper est de terminer le thread...
 
De plus, je souhaite faire de cette ménière pour des raisons de temps. Ce client FTP va être présenté en tant que projet à mon examen du BTS dans 2 semaines et j'en ai d'autres à terminer, c'est pour ça que j'aimerai finir cette dernière fonctionnalité :)
BENB Si je peux me permettre :
l'idee de finir un Thread "de l'exterieur" est en general une mauvaise idee.... qui se passe rarement bien et dont les consequences peuvent etre les plus inatendues....
 
En general ne veux pas dire toujours...
 
Ceci dit, je vous laisse debattre de la methode a utiliser n'etant pas tres competente en Windows est encore moins en MFC...

 

[edit]--Message édité par BENB--[/edit]

guillot Nan je pense pas... La fonction AfxBeginThread renvoie un pointeur sur un objet de type CWinThread, elle ne peut renvoyer un entier...
El_gringo

guillot a écrit a écrit :

Ca ne peut pas être possible ?
Etant donné que cette valeur est retournée quand la fonction a fini de s'exécuter, comment faire pour terminer le thread avant que cette fonction ne soit pas terminée ? puisque la valeur n'est pas encore retournée... :)




 
justement, TU fixe la valeur de retour de cette fonction quand, dans ton thread, tu fait AfxEndThread(). Par exemple, si tu mets 1 en paramètre de AfxEndThread(), ta fonction AfxBeginThread() rendra 1.
C ça Verdoux !?

guillot Ca ne peut pas être possible ?
Etant donné que cette valeur est retournée quand la fonction a fini de s'exécuter, comment faire pour terminer le thread avant que cette fonction ne soit pas terminée ? puisque la valeur n'est pas encore retournée... :)
verdoux SI ! :D
guillot Ce ne serait pas la valeur retournée par la fonction que je passe en paramètre de AfxBeginThread( ) ???
guillot Ok !
 
Par contre à quel moment je décide de ce code ? :)
verdoux C'est toi qui décide ce que tu veux envoyer comme code de retour.
Il y a aussi ExitThred et TerminateThread.
guillot Bonjour,
 
Dans mon application, j'ai créé un thread lançant une opération pouvant durer très longtemps (plusieurs heures). L'ennui, c'est que j'aimerai insérer dans mon interface graphique un bouton "Annuler" permettant de stopper et détruire ce thread.
 
J'ai vu que l'utilisation de la procédure AfxEndThread() était possible. Mais il demande le code de sortie ("exitcode" ) de mon thread.
 
Comment le récupérer ?
 
Apparemment il faut utiliser "GetExitCodeThread()" pour récupérer la valeur de l'exitcode en lui passant comme paramètres le HANDLE du thread (que j'ai pu récupérer) ainsi que la variable dans laquelle sera copiée l'exitcode.
L'ennui c'est que je récupère un LPDWORD et qu'il me faut un UINT comme paramètre de AfxEndThread().
Comment faire ? (un cast ne fonctionne pas)
 
Quelqu'un pourrait me donner un exemple SVP ?
 
Merci d'avance :)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)