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