[C++] CreateThread(); -> Exemple

CreateThread(); -> Exemple [C++] - Programmation

Marsh Posté le 02-09-2001 à 13:49:07    

Quelqu'un pourrait-il en quelques lignes (le moins possible !) me faire un petit exemple de l'emploi de la fonction CreateThread et de ExitThread() (Lancer une fonction et l'arrêter ensuite).
Doit-on obligatoirement lancer ExitThread(); à la fin de la fonction lancée par CreateThread() ?

Reply

Marsh Posté le 02-09-2001 à 13:49:07   

Reply

Marsh Posté le 02-09-2001 à 14:15:21    

-si tu veux faire simple, utilise _beginthread ou _beginthreadex
si tu n'utilise pas les MFC
sinon
AfxBeginThread
leur utilisation est triviale  
 
 
UINT corpsDuThread( LPVOID param )
{
...
return 1;
}
...
 
AfxBeginThread(corpsDuThread, donnee);
 
dans donnee, moi je mets souvent un this  ;)

Reply

Marsh Posté le 02-09-2001 à 14:31:03    

oui mais comment faire pour arrêter le thread à partir d'une autre fonction ?

Reply

Marsh Posté le 02-09-2001 à 16:00:58    

supposons que dans la methode thread t'as un
 
UINT corpsDuThread(LPVOID param)
{
while(1)
{
}
 
return 1;
}
 
eh bien tu remplace le 1 par un booleen que tu set a true au debut et que tu vas mettre a false dans l'autre fct quand tu voudras que ton thread s'arrete.
 
Il est fortement conseille de toujours sortir de la fonction thread par un return normal et de ne pas passer par une des methodes de l'api, qui risque de provoquer dans le meilleur des cas une fuite de mem...

Reply

Marsh Posté le 02-09-2001 à 16:14:30    

Je rencontre alors un problème :
Je clique sur un bouton Start de mon application qui lance le thread (while(n == 0)...). Chaque boucle dure un certain temps.
Je ferme mon appli en cliquant sur la croix en haut à droite. (J'ai bien pris soin de dire n=1 si on ferme). Mais là, vu que la boucle while n'est pas au niveau du test de n, le thread ne s'arrête pas (ou mal, la fonction ne se finissant pas) et j'ai un message d'erreur de windows.
Comment faire alors pour éviter ceci en fermant correctement le thread (c pour celà que je pensais à une des méthodes de l'api) !

Reply

Marsh Posté le 02-09-2001 à 17:59:16    

une solution simple c'est de faire le test sur n un peu plus souvent. Du genre  
if(!n) return 0;  
que tu places à un endroit "frequenté" de ta boucle while

Reply

Marsh Posté le 02-09-2001 à 20:32:11    

Ben c pas possible car c une et une seule fonction qui prend du temps (connect()) ! Et puis je sais pas ce que tu en penses mais ça m'as pas l'ai très rigoureux ! ;) Mais c pas bête !

Reply

Marsh Posté le 02-09-2001 à 20:43:55    

moi je changerais de socket, tu en prends une non bloquante et juste apres le connect, tu fais un select avec un timeout pas trop important pour verifier si ta socket deviens writable.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed