Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
1.5 KiB

BOOL PermEvent::Wait()
{
BOOL fStatus = TRUE ;
BOOL fTerminated = FALSE ;
while ( fStatus && ! fTerminated )
{
DWORD Event = MsgWaitForMultipleObjects (m_dwCount ,m_pHandles ,FALSE ,1000 ,QS_ALLINPUT) ;
ULONG HandleIndex = Event - WAIT_OBJECT_0 ;
if ( Event == 0xFFFFFFFF )
{
fStatus = FALSE ;
}
else if ( Event == WAIT_TIMEOUT)
{
// TimedOut();
}
else if ( Event >= WAIT_OBJECT_0 && HandleIndex <= m_dwCount )
{
// Go into dispatch loop
if ( HandleIndex == m_dwCount )
{
BOOL fDispatchStatus ;
MSG Msg ;
while ( ( fDispatchStatus = PeekMessage ( & Msg , NULL , 0 , 0 , PM_NOREMOVE ) ) == TRUE )
{
if ( ( fDispatchStatus = GetMessage ( & Msg , NULL , 0 , 0 ) ) == TRUE )
{
TranslateMessage ( & Msg ) ;
DispatchMessage ( & Msg ) ;
}
BOOL fTimeout = FALSE ;
while ( ! fTimeout & fStatus & ! fTerminated )
{
Event = WaitForMultipleObjects (m_dwCount ,m_pHandles ,FALSE ,0) ;
HandleIndex = Event - WAIT_OBJECT_0 ;
if ( Event == 0xFFFFFFFF )
{
fStatus = FALSE ;
}
else if ( Event == WAIT_TIMEOUT)
{
fTimeout = TRUE ;
}
else if ( HandleIndex < m_dwCount )
{
fStatus = WaitDispatch ( HandleIndex , fTerminated ) ;
}
else
{
fStatus = FALSE ;
}
}
}
}
else if ( HandleIndex < m_dwCount )
{
fStatus = WaitDispatch ( HandleIndex, fTerminated ) ;
}
else
{
fStatus = FALSE ;
}
}
}
return fStatus ;
}