读书人

急VC 多串口多线程CSerialPort类操作串

发布时间: 2012-03-29 12:53:13 作者: rapoo

急:VC 多串口多线程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);          } 

读书人网 >VC/MFC

热点推荐