//Ziiiiiiiiip :P
Télécharger le zip
Exemple à ne jamais suivre.Si on fait du MFC alors on utilise les fonction thread de MFC, ce qui peut passer ici mènerait au crash dans un projet plus important. Richter explique le danger de non appel correct des constructeurs lors d'appel direct de CreateThread avec des classes C++, s'y reporter.Encore pire est l'emploi de TerminateThread, CString et autres bidules, absolument rien n'est libéré. Imagine si ton prog devait continuer après la fermeture des threads...
Encore pire est l'emploi de TerminateThread, CString et autres bidules, absolument rien n'est libéré. Imagine si ton prog devait continuer après la fermeture des threads...J'ai pas trop saisi .. est-ce que tu pourrais m'Expliquer un peu plus svp ? Je sais que je fais des erreurs et c'est normal je crois car je ne programme pas depuis longtemps. L'important c'est que je cherche à m'améliorer !Merci
En plus la source existe deja en mieux (hook souris):http://www.cppfrance.com/codes/DISTANCE-PARCOURRUE-SOURIS-WIN32-HOOK_18005.aspx
Derrière TerminateThread, plus aucun temps processeur ne sera alloué au thread car considéré comme plus existant. CString (et/ou autre classe) ne passera jamais par son destructeur et ne libèrera jamais la mémoire allouée.TerminateThread est une fonction d'extrème urgence, il faut prévoir un mécanisme de sortie 'propre' pour le thread, return valeur.
salut brunews, ce probleme avec terminateThread se pose t'il aussi avec la fonction ExitThread ?Merci d'avoir précisé pour le TerminateThread.Extreme urgence, c'est un blocage de la thread par exemple ? (je m'en sert contre ça justement, un timer et si ça fais plus de 5 secondes que la thread devrait etre fermé alors hop terminatethread).merci encore de la précision, j'avais pas pensé aux strings qui ne se désaloueraient pas.
C'est "un peu plus propre" car la pile du thread est désallouée mais aucun objet C++ ne passera par son destructeur (idem en cela à TerminateThread).Un code C++ dont les threads manipulent des classes doit utiliser _beginthreadex() (ou fonctions MFC si est le cas) et s'arranger pour faire sortir chaque thread par son 'return value'.
ok merci, je vais changer tout mes exit thread en return alors, par chance j'en ais peu.
Merci BruNews pour ton explication. Je vais essayer de ne pas l'oublier !
donc si j'ajoute dans la boucle de chacuns des threads le code suivant :PeekMessage(&Msg,NULL,0,0,PM_REMOVE);if ( Msg.message == EXIT ){ return;}Et que je remplace chaque TerminateThread par ceci :PostThreadMessage(m_IdThread,EXIT,0,0);//EXIT etant un #define EXIT WM_USER+1Est-ce que je règle le problème ??
ton application n'est elle pas en DEBUG, plz compile en RELEASE !
C'est fait ;)
int bstop = 0;Les threads regardent régulièrement bstop et si le prog le met à 1 les threads sortent, très simple.
Ok Merci ! ;)
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte