tuer activement le fil:
Utilisez la valeur de retour de AfxBeginThread
(CWinThread*
) pour obtenir la poignée de fil (m_hThread
) puis passer cette poignée à l'API Win32 TerminateThread. Ce n'est pas un moyen sûr de terminer les threads, alors s'il vous plaît lisez la suite.
En attendant le fil à la fin:
utiliser pour obtenir le membre m_hThread, puis utilisez WaitForSingleObject(p->m_hThread, INFINITE);
Si cette fonction retourne WAIT_OBJECT_0
, le fil est terminée, la valeur de retour de AfxBeginThread
(CWinThread*
). Au lieu de INFINITE
, vous pouvez également mettre le nombre de millisecondes à attendre avant qu'un délai ne se produise. Dans ce cas, WAIT_TIMEOUT
sera retourné.
à votre fil de signalisation qu'il devrait se terminer:
Avant de faire la WaitForSingleObject
vient de mettre une sorte de drapeau que le fil doit sortir. Ensuite, dans votre boucle principale du thread, vous vérifiez la valeur booléenne et cassez la boucle infinie. Dans votre destructeur vous définissez ce drapeau puis faites un WaitForSingleObject
.
Même de meilleures façons:
Si vous avez besoin encore plus de contrôle, vous pouvez utiliser quelque chose comme boost conditions.