if (m_hWriteEvent != NULL)
ResetEvent(m_hWriteEvent);
m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);看起来应该是释放句柄并重新生成一个句柄,那么在ResetEvent之后为什么不CloseHandle呢?这样不会造成内存泄漏吗?
是不是对于句柄的操作都不用考虑内存泄漏吗?(以前在问一个将位图拷贝到剪切板的问题的时候有人说过,好像)

解决方案 »

  1.   

    ResetEvent是改变m_hWriteEvent的状态,不是重新生成
      

  2.   

    最后CreateEvent是不是该在else语句里面
      

  3.   

    这三行代码是有问题的,作者的思路应该是m_hWriteEvent是NULL就Create,否则Reset,但忘了写else,如果这些代码只执行一次是没问题的,执行第二次就会有内存泄露了。
      

  4.   

    ResetEvent(m_hWriteEvent);
    这一句应该是关闭CloseHandle来着的,完全写如下:if (m_hWriteEvent != NULL)
    {
        CloseHandle(m_hWriteEvent);
        m_hWriteEvent = NULL;
    }
    m_hWriteEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    if ( m_hWriteEvent == NULL )
    {
       MessageBox( _T("创建事件失败!"), _T("创建事件"), MB_ICONSTOP );
       return;
    }
      

  5.   

    当然,以上只是根据你这几行代码猜测本意,也许是另一种情况:
    要先复位ResetEvent,使 其可以再用
      

  6.   

    首先 请了解event的两种状态....
    ResetEvent从字面上看就是重置事件的意思..
    楼主 可以多去查查MSDN
      

  7.   

    这三行代码是有问题的,作者的思路应该是m_hWriteEvent是NULL就Create,否则Reset,但忘了写else,如果这些代码只执行一次是没问题的,执行第二次就会有内存泄露了。
      

  8.   

    ResetEvent 是重置event为无信号状态