需求是:我有10个一样的线程(函数内容一致,只是触发的点位不同) 去与主线程同步,在没有任务的时候,希望线程处于空闲时态,不占用CPU资源,但不能SLEEP,有主线程任务到来时,线程能够立即执行。
    当然我知道在一般情况下,空闲时就让线程睡眠,但是线程进入睡眠之后,什么时候再获得CPU控制权是由操作系统决定的,当任务到达时,线程并不能立即唤醒执行,这样的话就算是Sleep(1)毫秒也不能满足要求。

解决方案 »

  1.   

    WaitForSingleObject 等待 Event
      

  2.   

    1ms你都不能延误,意味着你需要一直监视任务是否到达,意味着需要一直占用CPU资源。死循环会一直占用CPU,一般,睡眠逻辑为:while(1)
    {
      if(NoTask)
          sleep(n);
      else
         doTask();
    }
      

  3.   

       
    (WaitForSingleObject 等待 Event)  我有十个条件  怎么去设置等待的事件  条件是在for循环里判定的?
      

  4.   

    在for 外面等事件不可以?while(1)
    {
      HANDLE hEventArray[] = { hExitEvent, hDoEvent }; 
      DWORD dwWait =   WaitForMultipleObjects(2,  hEventArray, FALSE, INFINITE);
      switch(dwWait)
      {
        case(WAIT_OBJECT_0 + 0): //exit event
        {
           return 1;
        }
        case(WAIT_OBJECT_0 + 1): //do event
        {
          //add you code here
          break;
        }
        default: //unexcept
        {
          ASSERT(0);
          retrun -1;
        }
      }  
    }
      

  5.   

    等待多个事件的话用WaitForMultipleObjects 
    注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。 
      

  6.   

    Sleep...
      

  7.   

    等待多个事件的话用WaitForMultipleObjects 
    注意WaitForMultipleObjects返回的时候不一定只有一个事件处于有信号状态。 
    多个事件处于有信号状态 怎么处理  大神们  急
      

  8.   

    WaitForMultipleObjects  的用法看一下帮助文档就清楚了,
    DWORD WaitForMultipleObjects(
    DWORD nCount,                      //时间个数
    const HANDLE* lpHandles,     //事件列表
    BOOL bWaitAll,                       //所有事件满足才返回,还是一个事件满足就返回
    DWORD dwMilliseconds        //超时时间
    );返回值 :第一事件满足,返回WAIT_OBJECT_0,第二个+1就好,依次类推