MOUSE-O-METER

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 4 juin 2006 à 23:28
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 - 6 juin 2006 à 07:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37952-mouse-o-meter

gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
6 juin 2006 à 07:20
Ok Merci ! ;)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
6 juin 2006 à 03:26
int bstop = 0;

Les threads regardent régulièrement bstop et si le prog le met à 1 les threads sortent, très simple.
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
6 juin 2006 à 00:03
C'est fait ;)
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
5 juin 2006 à 22:48
ton application n'est elle pas en DEBUG, plz compile en RELEASE !
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
5 juin 2006 à 18:07
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+1

Est-ce que je règle le problème ??
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
5 juin 2006 à 17:08
Merci BruNews pour ton explication. Je vais essayer de ne pas l'oublier !
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
5 juin 2006 à 14:52
ok merci, je vais changer tout mes exit thread en return alors, par chance j'en ais peu.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juin 2006 à 14:47
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'.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
5 juin 2006 à 14:26
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.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 juin 2006 à 10:42
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.
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
5 juin 2006 à 09:02
En plus la source existe deja en mieux (hook souris):
http://www.cppfrance.com/codes/DISTANCE-PARCOURRUE-SOURIS-WIN32-HOOK_18005.aspx
gbourgeois0019 Messages postés 152 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 2 juin 2008 1
5 juin 2006 à 01:44
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 juin 2006 à 23:28
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...
Rejoignez-nous