VOID APIENTRY ControlFunc( ULONG parm ) { ULONG ulCount; parm = parm; do { DosWaitEventSem( Requestsem, SEM_INDEFINITE_WAIT ); // wait for Request DosResetEventSem( Requestsem, &ulCount ); switch( Req ) { case REQ_GO: Go( true ); break; case REQ_TRACE_OVER: ExecTrace( TRACE_OVER, DbgLevel ); break; case REQ_TRACE_INTO: ExecTrace( TRACE_INTO, DbgLevel ); break; } DoInput(); _SwitchOff( SW_TASK_RUNNING ); DosPostEventSem( Requestdonesem ); } while( Req != REQ_BYE ); return; // thread over! }
static DWORD WINAPI ControlFunc( LPVOID parm ) { parm = parm; do { WaitForSingleObject( Requestsem, INFINITE ); // wait for Request switch( Req ) { case REQ_GO: Go( true ); break; case REQ_TRACE_OVER: ExecTrace( TRACE_OVER, DbgLevel ); break; case REQ_TRACE_INTO: ExecTrace( TRACE_INTO, DbgLevel ); break; } DoInput(); _SwitchOff( SW_TASK_RUNNING ); ReleaseSemaphore( Requestdonesem, 1, NULL ); // signal req done } while( Req != REQ_BYE ); return( 0 ); // thread over! }