Bonjour,
J'ai deux soucis :
1- J'ai une DLL qui lance un thread via :
m_pClientThread = (CClientThread*)AfxBeginThread(RUNTIME_CLASS(CClientThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
Ce thread a pour but de recevoir des données sur un socket et de mettre a jour une structure de portée globale.
Ca marche bien mais à la fermeture du programme, je veux tuer proprement le thread. Je lui envoie donc un message via:
:ostThreadMessage(m_pClientThread->m_nThreadID, WM_TERM_THREAD, 0, 0)
ou m_pClientThread est le pointeur sur le thread et WM_TERM_THREAD un message utilisateur pour signaler au thread qu'il doit se terminer.
Dans le thread, j'ai un mapping :
BEGIN_MESSAGE_MAP(CClientThread, CWinThread)
//{{AFX_MSG_MAP(CClientThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_THREAD_MESSAGE(WM_TERM_THREAD, OnTermThread)
END_MESSAGE_MAP()
pourtant, la fonction OnTermThread n'est jamais appelée !
En fait, :ostThreadMessage me retourne 0 (echec).
2 - J'ai voulu utiliser la fonction membre (surchargée) OnIdle de ma classe de thread pour mettre ma structure a jour régulièrement, mais elle n'est appelée qu'une à deux fois au démarrage de l'appli. et plus du tout ensuite ...
???
Pour moi c'est assez mystérieux, et j'ai rien trouvé de concluant sur MSDN et internet.
Une idée ??
Olivier
Partager