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 :
j'appelle maCom.PortClose(); pour fermer le port, et dans DebugView, j'obtiens uniquement:
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; }
[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
Partager