-VOID
-ControlPerformanceTest(HANDLE hThread,
- PERFORM_TEST_ARGS *Args,
- DWORD TimeOut)
-{
- DWORD status;
- CONTEXT lastContext;
- CONTEXT currentContext;
-
- ZeroMemory(&lastContext, sizeof(CONTEXT));
- lastContext.ContextFlags = CONTEXT_FULL;
- ZeroMemory(¤tContext, sizeof(CONTEXT));
- currentContext.ContextFlags = CONTEXT_FULL;
-
- do {
- _Sleep(1);
-
- if (_SuspendThread(hThread) == -1)
- break;
-
- if (_GetThreadContext(hThread, ¤tContext) == 0)
- break;
-
- if (IsContextChanged(¤tContext, &lastContext))
- Args->Time++;
-
- if (_ResumeThread(hThread) == -1)
- break;
-
- if (Args->Time >= TimeOut)
- {
- _TerminateThread(hThread, 0);
- Args->Result = TS_TIMEDOUT;
- break;
- }
-
- status = _WaitForSingleObject(hThread, 0);
- if (status == WAIT_OBJECT_0 || status == WAIT_FAILED)
- break;
-
- lastContext = currentContext;
- } while (TRUE);
-}
-