[C++] Attendre la fin d'un thread pour quitter

Attendre la fin d'un thread pour quitter [C++] - Programmation

Marsh Posté le 12-09-2001 à 19:13:03    

Comment dire à mon appli qu'elle attende qu'un thread se termine avant de quitter ?
Voici mon bout de code (MFC) :
 
void CANTChatWin2Dlg::OnClose()  
{
 stop = 1; //dit au thread d'arrêter, mais ça prend du temps, alors on attend :
 while(clok == 0) //clok = 1 à la fin du thread
  Sleep(10);
 
 CDialog::OnClose();
}
 
Mais lorsque que l'on ferme l'appli, ce code bloque tout. (Ctrl Alt Suppr pour arrêter).

Reply

Marsh Posté le 12-09-2001 à 19:13:03   

Reply

Marsh Posté le 12-09-2001 à 22:53:54    

utilise plutot waitforsingleobject(handle,timestamp) pour syncroniser le tout et arreteter le thread.

Reply

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

Ca marche toujours pas :
voici mon code :
 
HANDLE th;
 
Au chargement :
DWORD x;
th = CreateThread(NULL,0,srv,this,0,&x);
 
void CANTChatWin2Dlg::OnClose()  
{
 stops = 1;
 
 WaitForSingleObject(th,INFINITE);
 CDialog::OnClose();
}
 
Le thread :
DWORD WINAPI srv(void* pDialog)
{
 while(stops == 0)
 {
 ...
 }
 return 0;
}
 
Et ça bloque toujours quand je quitte.

Reply

Marsh Posté le 13-09-2001 à 21:28:00    

et avec while (WaitForSingleObject(th,TRUE)==WAIT_IO_COMPLETION); ?

Reply

Marsh Posté le 14-09-2001 à 09:15:48    

Je trouve les classes de synchronisation de win vraiment atroces..
 
Depuis que j´ai défini mes propres classes thread safe en me basant sur le principe qu´un accès mémoire fera jamais moins de 8bits (en gros synchro par un bool) tt marche à merveille.. :)
Alors effectivement si mon principe d´accès par 8 bits mini est pris en défaut je suis mal.. Mais je pense pas que ça arrivera de sitôt!! ;)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 14-09-2001 à 18:50:20    

J'ai fais ça mais ça marche toujours pas, là ça se bloque pas mais le thread n'est pas achevé proprement et j'ai un message d'erreur après la fermeture de l'appli :
void CANTChatWin2Dlg::OnClose()  
{
 stops = 1;
 while(WaitForSingleObject(th,TRUE)==WAIT_IO_COMPLETION);
 
 CDialog::OnClose();
}
Ca me prend la tête ce truc  :crazy:

Reply

Sujets relatifs:

Leave a Replay

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