碰到这样的一个问题,在一个线程A里,启动另外两个线程B,C,这线程B,C都等待线程A
里的一个CEvent对象E,当E有信号时,只有一个线程接收到,这是怎么回事啊?

解决方案 »

  1.   

    把你的Event改成Manual-reset类型的。CEvent E(FALSE, TRUE);
      

  2.   

    我做了实验,应该没有问题,但是我用的Win32 API,而不是直接用CEvent类。
    DWORD __stdcall WorkThread1(LPVOID p)
    {
    HANDLE hEvent = *(HANDLE*)p;
    WaitForSingleObject(hEvent, -1);
    MessageBox(NULL, L"1", L"1", 0);
    return 0;
    }DWORD __stdcall WorkThread2(LPVOID p)
    {
    HANDLE hEvent = *(HANDLE*)p;
    WaitForSingleObject(hEvent, -1);
    MessageBox(NULL, L"2", L"2", 0);
    return 0;
    }void CE3Dlg::OnBnClickedButton1()
    {
    m_hEvent = CreateEvent(NULL, TRUE, FALSE, L"");
    HANDLE h1 = CreateThread(NULL, 0, WorkThread1, (LPVOID)&m_hEvent, NULL, NULL);
    HANDLE h2 = CreateThread(NULL, 0, WorkThread2, (LPVOID)&m_hEvent, NULL, NULL);
    }void CE3Dlg::OnBnClickedButton2()
    {
    SetEvent(m_hEvent);
    }