开始先是定义了一个Event数组:HANDLE m_hEvent[MAIN_EVENT_COUNT];
然后预定义了几个事件:#define MAIN_EVENT_BASE      WAIT_OBJECT_0
                      #define MAIN_EVENT_COUNT     5;
                      #define MAIN_EVENT_EXIT      0;
                      #define MAIN_EVENT_INITUI    1;
                      #define MAIN_EVENT_INITNET   2;
                      #define MAIN_EVENT_INITEDUI  3;
                      #define MAIN_EVENT_SUCCESS   4;在主线程创建事件进程和事件,其中MAIN_EVENT_SUCCESS是这样创建的:         
         m_hEvent[MAIN_EVENT_SUCCESS] = CreateEvent(NULL,FALSE,FALSE,"logsuccess");
我打算通过按下对话框的一个按钮来激活该事件(SetEvent),然后继续下面的动作,但令人感到费解的是:每次程序一运行,还没有按下按钮,该事件就被激活了,这是怎么回事?百思不得其解,望高人相助!谢谢!

解决方案 »

  1.   

    你的SetEvent加在哪个函数里面?是不是位置不正确?
      

  2.   

    按下按钮后,我重载了CDialog::OnOK()
    void CUIThread::OnOK()
    {
       AfxGetApp()->PostThreadMessage( WM_LOGINSUCCESS, 0, 0 );
    }在主线程响应该消息:COrdsysApp::OnLoginSuccess( WPARAM wParam, LPARAM lParam )
    {
        SetEvent(m_hEvent[MAIN_EVENT_SUCCESS]);
    }
      

  3.   

    把CreateEvent(NULL,FALSE,FALSE,"logsuccess");改为
      CreateEvent(NULL,TRUE,FALSE,"logsuccess");试试.
      

  4.   

    CreateEvent的第二个参数为FALSE时,事件是自动激活,为TRUE时是手动激活.
      

  5.   

    就是设置为TRUE时还不行,真郁闷!
      

  6.   

    可能是你的主线程等待EVENT的问题了.