Attendre la fin d'un thread pour quitter [C++] - Programmation
Marsh Posté le 12-09-2001 à 22:53:54
utilise plutot waitforsingleobject(handle,timestamp) pour syncroniser le tout et arreteter le thread.
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. 
Marsh Posté le 13-09-2001 à 21:28:00
et avec while (WaitForSingleObject(th,TRUE)==WAIT_IO_COMPLETION); ?
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!!  
 
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   
 
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).