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

 


Dernière réponse
Sujet : [C++] Exemple ExitThread()
bjone ou sémaphore...

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
bjone ou sémaphore...
BENB Les mutex se sont des mecanismes qui permettent de partager des donnes entre threads, par exemple si tu as une file, tu doit la proteger par un mutex (mutual exclusion) pour eviter que deux threads viennent ajouter un element en meme temps. Une seule Thread a le mutex, pour l'avoir les autres attendent.
 
donc prendre le mutex
ajouter un element dans la file
relacher le mutex.
 
sans le mutex tu risque de te trouver avec deux thread mettant un element au meme indice...
 
ce qui peut provoquer des plantages...
En general on suppose que l'ecriture d'une variable (bool, int, etc) est atomique, et que donc il n'est pas necessaire des les proteger par un mutex, evidement ce n'est pas le cas des chaines de caracteres... des objets etc...
 
Plus ta machine a de processeur plus il y a des chances que tu ais des problemes et sur des machines a 16 procs on a tendence a mettre suffisement de mutex.
 
le probleme des mutexes ce sont les dead-locks
 
imagine deux thread A et B  
A prend le mutex1
B prends le mutex2
A tente de prendre le mutex2 et donc attends que B le rende pour continuer
B tente de prendre le mutex1 et donc attends que B le rende pour continuer....
DEADLOCK.
 
Verifie que les donnes que tu partages entre tes threads ne risquent rien. Chaque fois que tu te dis, non l'autre thread ne peu pas... reprend toi, et dis toi toujours que si ca peu mal se passer, ca se passera mal apres les tests (chez l'utilisateur final)...
antsite c quoi un mutex
antsite Mon thread c un thread normal : une boucle infinie while()
le problème vient bien de ce thread qui se quitte mal
BENB Il ne faut jamais utiliser de methodes telles que ExitThread..
 
A propos es-tu sur d'avoir des cancelation point dans le code de ton thread ?  
Es-tu sur que le plantage viens bien du multi-threading
 
Ne te manque-t-il pas des mutex d'ou mutilation de donnes...
seblamb ExitThread(th);  
GetExitCodeThread(th,&ec);  
 
Déja si tu fais ça je pense que ça marchera mieux
antsite Voici mon code, il compile mais il plante à l'appel de ExitThread();
 
HANDLE th;
DWORD x;
 
Une fonction
{
 th = CreateThread(NULL,0,srv,this,0,&x);
}
 
Une autre fonction
{
 DWORD ec;
 GetExitCodeThread(th,&ec);
 ExitThread(ec); //crash
}
 
Le thread en question :
DWORD WINAPI srv(void* pDialog)
{
 while(true)
  //du code
 return 0;
}
 
Je tiens ABSOLUMENT à utiliser ExitThread() et non une simple variable dans le while() qui terminerait le thread.
Donc, qu'est-ce qui ne va pas dans mon thread ?

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