⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsthread.cpp

📁 一个不错
💻 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 + -