等待事件的问题
while(gbExternCondition == FALSE)
{
Sleep(1);
}和WaitForSingleObject(hEvent, INFINITE);作用是否一样?

解决方案 »

  1.   

    不一样,一个是100%CPU的执行循环,一个是内核态转用户态的线程挂起。
      

  2.   

    WaitForSingleObject(hEvent, INFINITE);在有信号前处理机不会给线程时间while(gbExternCondition == FALSE)
    {
    Sleep(1);
    }
    处理机随时将线程唤醒执行判断语句
      

  3.   

    再请问
    那我用WaitForSingleObject(hEvent, INFINITE);
    淘汰while(gbExternCondition == FALSE) Sleep(1);可以吗?
      

  4.   

    To mscf(扎西特勒),    个人感觉while(gbExternCondition == FALSE) Sleep(1);除了会消耗CPU时间外,没有优势。
    您能举个例子说明使用while(gbExternCondition == FALSE) Sleep(1);的场合吗?
      

  5.   

    一直在用户态运行,不用花费处理器时间来处理内核模式到用户模式的转换,如果你的程序返回的条件变化比较频繁,比如gbExternCondition为TRUE后进行相应的处理你马上又将它改为FALSE进入该循环,应该比重置事件要来得快
      

  6.   

    void wait(DWORD dwTime)
    {
    MSG msg;
    DWORD dwOrgTick = GetTickCount();
    while((GetTickCount() - dwOrgTick) < dwTime)
    {
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    }
      

  7.   

    两者各有各的用途吧
    sleep单纯的循环,
    event等待事件(便于控制)
      

  8.   

    感谢楼上各位热心的回答!To pengjd(悲酥清风),
    事件的例子与说明,在msdn的进程、线程一节的同步中有详细的说明了。在csdn中搜索“事件”也会找到很多的例子。