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 : Sélectionner tout - Visualiser dans une fenêtre à part
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