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.
|
|
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 ; }
|