Salut à tous,
j'utilise depuis quelque temps la classe SerialCom de Farscape :
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
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);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 pCom->StopThread(); m_pSerialPort->PortClose();La méthode StopThread retourne 'true' : Thread suspendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 do { SetEvent(m_hCloseCom); } while(m_bThreadExist);
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é :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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m_btRun.PostMessage(WM_KEYDOWN, ' '); m_btRun.PostMessage(WM_KEYUP, ' ');
Quelqu'un voit il pourquoi ?
Peut on fermer un thread depuis une méthode dont il est le parent ?
merci.
Partager