void detach() { if (!joinable()) throw system_error(); if (mHandle != _STD_THREAD_INVALID_HANDLE) { CloseHandle(mHandle); mHandle = _STD_THREAD_INVALID_HANDLE; } mThreadId.clear(); }
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(); }