急VC 多串口多线程CSerialPort类操作串口的开关有关问题
急:VC 多串口多线程CSerialPort类操作串口的开关问题
VC做一个上位机软件,是基于RS485通讯,涉及到5个串口,分别要从5个串口中的下位机中实时采集返回数据,所以采用轮询制从串口1到串口5依次按地址发送命令采集数据,用的是CSerialPort类,但是在操作CserialPort类关闭串口时出现问题,一次打开一个串口然后关闭正常,再打开就有问题,非得退出程序后再打开!期待各位的帮助,谢谢!
------解决方案--------------------
使用的是Modbus主从站应答式的通信协议么,你可以同时打开5个CSerialPort类的对象,最后关闭这五个串口对象。
假如使用的是485串口转USB,可能会遇到关闭时候进程退不出来的问题,假如遇到了,可以向我询问。没有的话,就算了。
CSerialPort类的关闭有点问题,自己用的时候重写一下,我把我重写后的贴上来,楼主可以参考一下。
VC做一个上位机软件,是基于RS485通讯,涉及到5个串口,分别要从5个串口中的下位机中实时采集返回数据,所以采用轮询制从串口1到串口5依次按地址发送命令采集数据,用的是CSerialPort类,但是在操作CserialPort类关闭串口时出现问题,一次打开一个串口然后关闭正常,再打开就有问题,非得退出程序后再打开!期待各位的帮助,谢谢!
------解决方案--------------------
使用的是Modbus主从站应答式的通信协议么,你可以同时打开5个CSerialPort类的对象,最后关闭这五个串口对象。
假如使用的是485串口转USB,可能会遇到关闭时候进程退不出来的问题,假如遇到了,可以向我询问。没有的话,就算了。
CSerialPort类的关闭有点问题,自己用的时候重写一下,我把我重写后的贴上来,楼主可以参考一下。
- C/C++ code
void CSerialPort::closePort() { while (m_bThreadAlive) { SetCommMask(m_hcomm, 0); SetEvent(m_hShutDown); } if (m_ov.hEvent) { CloseHandle(m_ov.hEvent); } if (m_hWrite) { CloseHandle(m_hWrite); } if (m_hShutDown) { CloseHandle(m_hShutDown); } m_ov.hEvent = NULL; m_hWrite = NULL; m_hShutDown = NULL; if (m_szBufferWrite) { delete [] m_szBufferWrite; } m_szBufferWrite = NULL; // // if the port is still opened: close it if (m_hcomm != NULL) { CloseHandle(m_hcomm); m_hcomm = NULL; } bComSate = FALSE; }
------解决方案--------------------
- C/C++ code
if(::PeekMessage(&message,m_pOwner->m_hWnd,0,0,PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); }