bool gcore::Thread::detach() { if (detachable()) { CloseHandle((HANDLE)mSelf); mRunning = false; mSelf = 0; mSelfId = 0; return true; } return false; }
bool gcore::Thread::detach() { if (detachable()) { bool detached = (pthread_detach((pthread_t)mSelf) == 0); if (detached) { mRunning = false; mSelf = 0; return true; } } return false; }
void test_detach() { { boost::fibers::fiber f( boost::fibers::launch::post, (detachable()) ); BOOST_CHECK( f.joinable() ); f.detach(); BOOST_CHECK( ! f.joinable() ); boost::this_fiber::sleep_for( std::chrono::milliseconds(250) ); BOOST_CHECK( detachable::was_running); BOOST_CHECK_EQUAL( 0, detachable::alive_count); } { boost::fibers::fiber f( boost::fibers::launch::post, (detachable()) ); BOOST_CHECK( f.joinable() ); boost::this_fiber::yield(); f.detach(); BOOST_CHECK( ! f.joinable() ); boost::this_fiber::sleep_for( std::chrono::milliseconds(250) ); BOOST_CHECK( detachable::was_running); BOOST_CHECK_EQUAL( 0, detachable::alive_count); } }
gcore::Thread::~Thread() { if (detachable()) { detach(); } }