根据WaitForMultipleObjects返回值可以确定等到的是什么信号哇,
返回是WAIT_OBJECT_0或WAIT_OBJECT_0+n,n是你所等待的信号数组中信号的下标,根据返回值有启动相应的线程处理信号不久得了,这样就不会一直只执行一个信号对应操作了
WAIT_OBJECT_0是信号数组中的的0个信号

解决方案 »

  1.   

    HANDLE hEvent[2];
    DWORD dwResult;
    int nBakLen = 0;
    LPBYTE pBuffer;
    LPBYTE pBakBuf = new BYTE[COMM_BMAXLEN];
    hEvent[0] = m_hEventKillThread;
    hEvent[1] = m_pListRecv->m_hEventDataIn;while (TRUE)
    {
        dwResult = WaitForMultipleObjects(2, hEvent, FALSE, INFINITE);
        if (dwResult == WAIT_OBJECT_0)
        {
    your code
        }
        else if (dwResult == WAIT_OBJECT_0+1)
       {
        ... //your code
       }
    }
      

  2.   

    DWORD WaitForMultipleObjects(
      DWORD nCount,             // number of handles in the handle array
      CONST HANDLE *lpHandles,  // pointer to the object-handle array
      BOOL fWaitAll,            // wait flag
      DWORD dwMilliseconds      // time-out interval in milliseconds
    );
    fWaitAll 有两种状态:
    1 让线程进入等待状态,直到制定内核对象中的任何一个变为已通知状态。 2让线程进入等待状态,直到所有内核对象变为已通知状态。(TRUE)
      

  3.   

    你看一下CreateSemaphore函数,他创建出来的是可以累计的信号量,如果还不明白我再贴例子
      

  4.   

    HANDLE m_JobSemaphore=CreateSemaphore(NULL, 0, 1000000, NULL);
      //以上语句创建出一个最大可以累计1000000个的信号量,初始为无信号状态。  ReleaseSemaphore(m_JobSemaphore, 1, NULL);
      //以上语句触发一次m_JobSemaphore信号。
      //其他用法与用CreateEvent创建出的信号量的用法一样
      

  5.   

    请问创建
    CreateWaitableTimer(NULL, FALSE, NULL);时怎么会提示出错?
    D:\work\VC_work\winThread\winThread.cpp(54) : error C2065: 'CreateWaitableTimer' : undeclared identifier
    Error executing cl.exe.
    Creating browse info file...请问高手是怎么回事?
      

  6.   

    我在win2k(中文) + sp2 + vc++6.0 + vssp5
    下用它,出现上诉错误。
    以前是
    #include <windows.h>
    #include <Winbase.h>但是我加上
    #include <afxwin.h>就没有上面的错误?为什么?
      

  7.   

    lvfengxun(lfx):
      大哥,但是好象没有减少信号量的函数啊?
      

  8.   

    你用WaitForSingleObject或WaitForMultipleObjects得到一次,就自动将信号量减少一次