bool Thread::Start(ThreadState initialState) { if (initialState == NotRunning) return 0; if (GetThreadState() != NotRunning) { OVR_DEBUG_LOG(("Thread::Start failed - thread %p already running", this)); return 0; } // Free old thread handle before creating the new one CleanupSystemThread(); ExitCode = NULL; ThreadFlags = (initialState == Running) ? OVR_THREAD_STARTED : OVR_THREAD_START_SUSPENDED; ThreadHandle = (HANDLE) _beginthreadex(0, (unsigned)StackSize, Thread_Win32StartFn, this, 0, (unsigned*)&IdValue); // Failed? Fail the function if (ThreadHandle == 0) { ThreadFlags = 0; return 0; } return 1; }
Thread::~Thread() { // Thread should not running while object is being destroyed, // this would indicate ref-counting issue. //OVR_ASSERT(IsRunning() == 0); // Clean up thread. CleanupSystemThread(); ThreadHandle = 0; }