[C++] Exemple ExitThread()

Exemple ExitThread() [C++] - Programmation

Marsh Posté le 19-09-2001 à 13:51:44    

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 ?

Reply

Marsh Posté le 19-09-2001 à 13:51:44   

Reply

Marsh Posté le 19-09-2001 à 14:33:51    

ExitThread(th);  
GetExitCodeThread(th,&ec);  
 
Déja si tu fais ça je pense que ça marchera mieux

Reply

Marsh Posté le 19-09-2001 à 15:10:47    

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...

Reply

Marsh Posté le 19-09-2001 à 15:56:10    

Mon thread c un thread normal : une boucle infinie while()
le problème vient bien de ce thread qui se quitte mal

Reply

Marsh Posté le 19-09-2001 à 15:56:32    

c quoi un mutex

Reply

Marsh Posté le 19-09-2001 à 17:16:21    

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)...

Reply

Marsh Posté le 19-09-2001 à 17:33:09    

ou sémaphore...

Reply

Sujets relatifs:

Leave a Replay

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