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

  FORUM HardWare.fr
  Programmation

  [VISUAL C++] Fermeture prématurée d'un thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VISUAL C++] Fermeture prématurée d'un thread

n°36780
guillot
Posté le 03-06-2001 à 19:08:16  profilanswer
 

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 :)

mood
Publicité
Posté le 03-06-2001 à 19:08:16  profilanswer
 

n°36787
verdoux
And I'm still waiting
Posté le 03-06-2001 à 21:07:18  profilanswer
 

C'est toi qui décide ce que tu veux envoyer comme code de retour.
Il y a aussi ExitThred et TerminateThread.

n°36802
guillot
Posté le 04-06-2001 à 01:06:53  profilanswer
 

Ok !
 
Par contre à quel moment je décide de ce code ? :)

n°36911
guillot
Posté le 04-06-2001 à 23:45:15  profilanswer
 

Ce ne serait pas la valeur retournée par la fonction que je passe en paramètre de AfxBeginThread( ) ???

n°36913
verdoux
And I'm still waiting
Posté le 05-06-2001 à 00:16:46  profilanswer
 

SI ! :D

n°36944
guillot
Posté le 05-06-2001 à 10:18:28  profilanswer
 

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... :)

n°36946
El_gringo
Posté le 05-06-2001 à 10:23:31  profilanswer
 

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 !?

n°36951
guillot
Posté le 05-06-2001 à 10:43:58  profilanswer
 

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

n°36955
BENB
100% Lux.
Posté le 05-06-2001 à 10:48:06  profilanswer
 

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]

n°36957
guillot
Posté le 05-06-2001 à 10:51:46  profilanswer
 

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é :)

mood
Publicité
Posté le 05-06-2001 à 10:51:46  profilanswer
 

n°36963
verdoux
And I'm still waiting
Posté le 05-06-2001 à 11:02:48  profilanswer
 

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]

n°36964
guillot
Posté le 05-06-2001 à 11:05:48  profilanswer
 

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 :=)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VISUAL C++] Fermeture prématurée d'un thread

 

Sujets relatifs
[Visual C++] Remplir une combo box[Windows] Info sur thread ?
il y a t'il un pro de visual Interdev methode addRecord=soci ???recuperer la date sous visual C++
MOTEUR 3D POUR VISUAL C++ 6 ???[Visual C++] intercepter des scanf ou des cout vers boite de dialogue.
[Visual C++] boite dlg Sauvegarde ferme l'application...[HELP] pb de controle de la rapidité d'un(e) thread.
[ Visual C++ ] créer une console (style dos) dans une interface ?Visual Studio 6
Plus de sujets relatifs à : [VISUAL C++] Fermeture prématurée d'un thread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR