Salut à tous,

j'utilise depuis quelque temps la classe SerialCom de Farscape :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
m_pSerialPort->PortOpen(1, 115200, 'N', 8, 1); //port n°, baudrate, parity, byte transfert, stop bit(s)
m_pSerialPort->UseRtsCts(false);
m_pSerialPort->UseDtrDsr(false);
m_pSerialPort->UseXonXoff(false);
m_pSerialPort->SetCommMask(EV_RXCHAR);
m_pSerialPort->StartThread((CWnd*)this);
Cette portion fonctionne correctement. Dans la méthode de réception (OnReceiveCom(WPARAM ch, LPARAM port)), j'ai besoin de fermer le port dans certains cas. J'ai donc essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
pCom->StopThread();
m_pSerialPort->PortClose();
Le problème est que mon appli reste bloquée dans la méthode PortClose sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
do
{
     SetEvent(m_hCloseCom);
}
while(m_bThreadExist);
La méthode StopThread retourne 'true' : Thread suspendu.

Sachant que la fermeture du port est conditionnée soit par une condition à la réception soit par un appui sur un bouton, j'ai tenté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
m_btRun.PostMessage(WM_KEYDOWN, ' ');
m_btRun.PostMessage(WM_KEYUP, ' ');
depuis la méthode de réception pour simuler l'appui sur le bouton et ainsi fermer le port. (L'appui bouton fonctionne correctement). Mais le problème est le même, l'application reste bloquée sur le SetEvent...

Quelqu'un voit il pourquoi ?
Peut on fermer un thread depuis une méthode dont il est le parent ?

merci.