我建立了一个时间用于超时控制,
HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);ResetEvent(hEvent);
WaitForSingleObject( hEvent, 2000 );
if( GetLastError() == WAIT_OBJECT_0 )
AfxMessageBox("指定的同步对象处于有信号的状态"); 奇怪是调用WaitForSingleObject后,总是显示它是于WAIT_OBJECT_0退出呢?我都不知它是不是超时退出且事件无信号。
HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);ResetEvent(hEvent);
WaitForSingleObject( hEvent, 2000 );
if( GetLastError() == WAIT_OBJECT_0 )
AfxMessageBox("指定的同步对象处于有信号的状态"); 奇怪是调用WaitForSingleObject后,总是显示它是于WAIT_OBJECT_0退出呢?我都不知它是不是超时退出且事件无信号。
如下:
WaitForSingleObject( hEvent, INFINITE );
if( GetLastError() == WAIT_OBJECT_0 )应该这样,直接检查返回值:
DWORD dwRet = WaitForSingleObject( hEvent, 2000 );
if( dwRet == WAIT_OBJECT_0 )
......
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("都不是");}
switch (dwRec)
{
case WAIT_TIMEOUT:
/*超时*/
break;
case WAIT_ABANDONED:
/**/
break;
case WAIT_OBJECT_0:
/**/
break;
default:
break;
}
这和我得有什么区别呢?
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("超时");
}