CEvent g_Event; //事件对象 g_Event.SetEvent(); //设置为有信号状态
WaitForSingleObject(g_Event.m_hObject, INFINITE); //无限期等待
各位大侠,我在学习一个例子的时候看到了上面的代码,看代码的注释有个“无限期等待”,我不理解是怎么样的无限期?因为根据程序实际运行情况看,这条语句后面的代码照样执行了,程序并没有再Wati这里“无限期等待”。

解决方案 »

  1.   

    WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回值才执行后面的代码。此外,当dwMilliseconds设置为特殊值0时,测试hHandle核心对象是否被激发,函数立即返回。
      

  2.   

    你都已经把信号设置为有信号了,WaitForSingleObject就马上有信号,让你通过了。
    无限期等待就是海枯石烂后还继续等待。等待啥呢?就是有信号状态。
      

  3.   

    请不要直接copy手册呀,请针对我列出的代码告诉我为什么:先设置成有信号状态,然后带“INFINITE”参数测试信号状态的结果是“无限期等待”,按我的理解应该是立即返回,怎么注释却是“无限期等待”!是我理解错,还是例子中注释错!
      

  4.   

    按2楼兄弟的意思,如果我把前一句改成 g_Event.resetEvent(),那就真会无限期等待了,对吧!?
      

  5.   

    的确不会“无限期等待”,可能注释是针对“INFINITE”参数的作用来说的
      

  6.   

    本帖最后由 happyparrot 于 2010-12-08 15:43:41 编辑
      

  7.   

    The WaitForSingleObject function checks the current state of the specified object. If the object's state is nonsignaled, the calling thread enters the wait state until the object is signaled or the time-out interval elapses.
      

  8.   

    在双线程的环境下来理解这个问题,一个全局的 event,初始是无信号的一个线程 A 在无限等待(WaitForSingleObject(,INFINITE)另外一个线程 B 在条件满足的时候,设置 event 为有信号,使得线程 A 继续执行
      

  9.   

    查一下msdn就知道了,等待事件有信号,没有超时,如果参数INFINITE改成一个时间值的话就是超时时间