[class SerialCom de Farscape] échec de PortClose
Salut à tous,
j'utilise depuis quelque temps la classe SerialCom de Farscape :
Code:
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:
1 2
| pCom->StopThread();
m_pSerialPort->PortClose(); |
Le problème est que mon appli reste bloquée dans la méthode PortClose sur :
Code:
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:
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.