急VC 多串口多线程CSerialPort类操作串口的开关有关问题

急: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);
          }