[MFC] Problème d'arrêt du thread avec CCom de Farscape
Bonjour à tous,
je n'arrive pas à fermer le port à la fin d'une communication série (en fait un Virtual Com Port, pour un périphérique USB) :
j'ai (légèrement) modifié une partie de la procédure CCom:: PortClose(), ce qui donne ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
//-----------------------------------------
bool CCom::PortClose()
{
//
if(!m_hCom) return false;
PurgeCom();
if(m_pThread) // fermeture thread
{
TRACE("Le Thread tente de s'arrêter");
do
{
if (!SetEvent(m_hCloseCom)) TRACE("Erreur: %d",GetLastError() );
}
while(m_bThreadExist);
TRACE("Le Thread s'arrête");
CloseHandle(m_hCloseCom);
}
if(m_Ov.hEvent) CloseHandle(m_Ov.hEvent);
m_Ov.hEvent=NULL;
m_hCloseCom=NULL;
m_pThread=NULL;
// EscapeCommFunction( m_hCom, CLRDTR );
EscapeCommFunction( m_hCom, CLRRTS );
int status= CloseHandle( m_hCom);
m_hCom=NULL;
if ( status ) return true;
GetError();
return false;
} |
j'appelle maCom.PortClose(); pour fermer le port, et dans DebugView, j'obtiens uniquement:
[3980] Le Thread tente de s'arrêter
puis ma boite de dialogue se bloque !!
j'en déduis donc que :
1. m_bThreadExist ne vaut jamais NULL, donc la boucle est infinie
2. il n'y a pourtant pas d'erreur dans SetEvent car je n'ai pas d'affichage d'un code d'erreur
Farscape, pourrais-tu m'expliquer ce qui se passe ?
Merci beaucoup d'avance
Philippe