📄 tsthread.cpp
字号:
#include "tsthread.h"#include "wy_atdestroy.h"#include "wy_uty.h"void TsThread::_gck(void){ try { thread_state(); WY_TERMINATE(""); } catch(const Wy_Thread::Reply& e) { if(e!=Wym_EPERM) { WY_TERMINATE(""); } }; if(thread_self().is_default()) { WY_TERMINATE(""); } if(Wy_ThreadID::_thread_equal(Wy_Thread::thread_self(), ::pthread_self())==false) { WY_TERMINATE(""); } if(dynamic_cast<TsThread*>(tbase_ptr())!=this) { WY_TERMINATE(""); } bool pre_can=set_cancelable(false); pre_can=set_cancelable(pre_can); if(pre_can!=false) { WY_TERMINATE(""); } if(active_threads()<=0) { WY_TERMINATE(""); } if(max_threads()<=0) { WY_TERMINATE(""); }};WyRet TsThread::reset(ExitType et, WyReply retv, WyTimeSpec delay){ _etype=et; _re_value=retv; _wtm.reset(delay); WyRet r; if((r=Wy_Thread::reset())!=Ok) { WY_RETURN(r); } return(Ok);};static const bool EntLeaMsg=false;WyRet TsThread::tmain(void)try { if(EntLeaMsg) { Wy::cerr << "TsThread::tmain() entered --> "; } WyRet r; if(Wy_Thread::tbase_ptr()!=static_cast<Wy_Thread*>(this)) { WY_THROW( WyRet() ); } if((r=this->cancel())!=Wym_EPERM) { WY_THROW(r); } if((r=this->wait_not(Null))!=Wym_EPERM) { WY_THROW(r); } if((r=this->wait_not(Active))!=Wym_EPERM) { WY_THROW(r); } if((r=this->wait_not(Stopped))!=Wym_EPERM) { WY_THROW(r); } switch(_etype) { case Return: { _gck(); cancel_point(); Wy::sleep(_wtm); _gck(); if(EntLeaMsg) { Wy::cerr << "TsThread::tmain() returned\n"; } return(_re_value); }; break; case Exit: { _gck(); cancel_point(); Wy::sleep(_wtm); _gck(); if(EntLeaMsg) { Wy::cerr << "TsThread::tmain() exited\n"; } exit(_re_value); }; break; case Reset: case Cancel: { for(;;) { _gck(); Wy::sleep(WyTimeSpec(0,100000000)); // cancel point yield(); cancel_point(); } } break; default: WY_TERMINATE(""); }; if(EntLeaMsg) { Wy::cerr << "TsThread::tmain() returned\n"; }}catch(...) { if(EntLeaMsg) { Wy::cerr << "TsThread::tmain() left\n"; } throw;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -