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

 


Dernière réponse
Sujet : [C++] CreateThread(); -> Exemple
aqwsezsxdr 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.

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
aqwsezsxdr 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.
antsite 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 !
aqwsezsxdr 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
antsite 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) !
aqwsezsxdr 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...
antsite oui mais comment faire pour arrêter le thread à partir d'une autre fonction ?
aqwsezsxdr -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  ;)
antsite 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() ?

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