在CSerialPort类中有
Event = WaitForMultipleObjects(3, port->m_hEventArray, FALSE, INFINITE);
我一直搞不懂读的事件是怎样激活的?我没有发现它在那里用了setevent函数啊

解决方案 »

  1.   

    小弟阿,你怎么看程序不仔细阿.我帮你看了一下,
    首先初始化事件数组
    // initialize the event objects
       m_hEventArray[0] = m_hShutdownEvent; // highest priority
       m_hEventArray[1] = m_ov.hEvent;
       m_hEventArray[2] = m_hWriteEvent;事件一在 程序关闭是触发,如其析构函数
    CSerialPort::~CSerialPort()
    {
    do
    {
    SetEvent(m_hShutdownEvent);
    } while (m_bThreadAlive);
    }
    其中事件二是串口重叠操作完成后触发的事件。事件三在如下函数触发
    void CSerialPort::WriteToPort(char* string)
    {
    assert(m_hComm != 0); memset(m_szWriteBuffer, 0, sizeof(m_szWriteBuffer));
    strcpy(m_szWriteBuffer, string); // set event for write
    SetEvent(m_hWriteEvent);
    }
    其中事件二的触发交复杂,要好好体会。
      

  2.   

    我还是不太明白事件二是串口重叠操作完成后触发的事件,我单步执行事在WaitForMultipleObjects停止,当串口中有信号可读时事件二触发,可是我一直都不明白是什么时候SetEvent(m_ov.hEvent)??
      

  3.   

    用CSerialPort类如何收发二进制数据?
      

  4.   

    事件分为有信号和无信号,SetEvent()是设置事件为有信号,ResetEvent()设置事件为无信号。至于你说的SetEvent(m_ov.hEvent)程序中当然没有,当操作完成后m_ov结构的HEvent自动触发阿
      

  5.   

    哈哈,终于搞懂了。谢谢spily365(问题小子)