我建立了一个时间用于超时控制,
HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);ResetEvent(hEvent);
     WaitForSingleObject( hEvent, 2000 );
     if( GetLastError() == WAIT_OBJECT_0 )
AfxMessageBox("指定的同步对象处于有信号的状态"); 奇怪是调用WaitForSingleObject后,总是显示它是于WAIT_OBJECT_0退出呢?我都不知它是不是超时退出且事件无信号。

解决方案 »

  1.   

    如果你确定该时间一定能等到的,可以把等待时间设置为无限长。
    如下:
    WaitForSingleObject( hEvent, INFINITE );
      

  2.   

    直接取waitforsingleobject的返回值,如果返回WAIT_OBJECT_0说明事件有信号,返回WAIT_TIMEOUT说明超时。
      

  3.   

    怎么这样用??
    if( GetLastError() == WAIT_OBJECT_0 )应该这样,直接检查返回值:
    DWORD dwRet = WaitForSingleObject( hEvent, 2000 );
    if( dwRet == WAIT_OBJECT_0 )
     ......
      

  4.   

    seaquester().  我那样调用是不是错的呀!
      

  5.   

    seaquester().  不行呀?输出结果——“都不是”!
    DWORD dwRec = WaitForSingleObject( hEvent, 2000 );
    if( dwRec == WAIT_OBJECT_0 )
       AfxMessageBox("指定的同步对象处于有信号的状态"); 
    else if ( dwRec == WAIT_OBJECT_0 )
                AfxMessageBox("超时");
    else if ( dwRec == WAIT_ABANDONED )
                AfxMessageBox("互斥");
    else if ( dwRec == WAIT_FAILED )
                AfxMessageBox("不成功");
    else
      {AfxMessageBox("都不是");}
      

  6.   

    事实是我只想用WaitForSingleObject的超时功能。所以虽然建立了事件,但从不用它,初始状态为无信号。可是却不知它的调用情况是什么?
      

  7.   

    DWORD dwRec = WaitForSingleObject( hEvent, 2000 );
    switch (dwRec)
    {
      case WAIT_TIMEOUT:
           /*超时*/
           break;
      case WAIT_ABANDONED:
           /**/
           break;
      case WAIT_OBJECT_0:
           /**/
           break;
      default:
           break;
    }
      

  8.   

    at_yuan2(瑞) 
    这和我得有什么区别呢?
      

  9.   

    返回超时阿
    HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); ResetEvent(hEvent);
    DWORD dw = WaitForSingleObject( hEvent, 2000 );
    if( dw == WAIT_OBJECT_0 )

    {
    AfxMessageBox("指定的同步对象处于有信号的状态"); 
    }
    else if(dw = WAIT_TIMEOUT)
    {
    AfxMessageBox("超时"); 
    }
      

  10.   

    我晕!!!怎么按at_yuan2(瑞) 的写法,就返回“超时”呢?大家给说一下吧。万分感谢。