Example #1
0
 void detach()
 {
     if (!joinable())
         throw system_error();
     if (mHandle != _STD_THREAD_INVALID_HANDLE)
     {
         CloseHandle(mHandle);
         mHandle = _STD_THREAD_INVALID_HANDLE;
     }
     mThreadId.clear();
 }
Example #2
0
 void join()
 {
     if (get_id() == GetCurrentThreadId())
         throw system_error(EDEADLK, generic_category());
     if (mHandle == _STD_THREAD_INVALID_HANDLE)
         throw system_error(ESRCH, generic_category());
     if (!joinable())
         throw system_error(EINVAL, generic_category());
     WaitForSingleObject(mHandle, INFINITE);
     CloseHandle(mHandle);
     mHandle = _STD_THREAD_INVALID_HANDLE;
     mThreadId.clear();
 }