[code-design]TvServer 之CRunOnce
来源:互联网 发布:软件生存周期模型 编辑:程序博客网 时间:2024/05/21 08:57
CRunOnce is mainly described how to create exit thread
class CRunOnce: public IThread{private: pthread_mutex_t m_mutex; int m_state; pthread_t m_thread; IParams *m_params; IRunnable *m_runnable; static void thread_exit(int sig) { TvServerService_detachThread(); pthread_exit(0); } static void * looper_func(void *p) { CRunOnce *r = (CRunOnce*)p; //assert(r && r->m_runnable); struct sigaction actions; memset(&actions, 0, sizeof(actions)); // sigemptyset(&actions.sa_mask); actions.sa_flags = SA_SIGINFO; actions.sa_handler = CRunOnce::thread_exit; sigaction(SIGUSR2,&actions,NULL); TvServerService_attachThread(); r->m_runnable->Run(r->m_params); TvServerService_detachThread(); return NULL; }public: virtual void Post(IRunnable *r, bool replace, IParams *p, unsigned int after ) { if(!m_runnable && r) { m_runnable = r; m_params = p; pthread_mutex_lock(&m_mutex); if(m_state == RUN_STATE_INIT) { m_state = RUN_STATE_RUNNING; int ret = pthread_create(&m_thread, NULL, CRunOnce::looper_func, this); // pthread_detach(m_thread); } //assert(!ret); pthread_mutex_unlock(&m_mutex); } } CRunOnce() { m_mutex = PTHREAD_MUTEX_INITIALIZER; m_state = RUN_STATE_INIT; m_runnable = NULL; m_params = NULL; } virtual void Halt(void) { bool tohalt=false; pthread_mutex_lock(&m_mutex); if(m_state == RUN_STATE_RUNNING) { m_state = RUN_STATE_HALTED; tohalt = true; } pthread_mutex_unlock(&m_mutex); if(tohalt) { pthread_kill(m_thread, SIGUSR2); pthread_join(m_thread,NULL); } } virtual ~CRunOnce() { Halt(); if(m_runnable) { if(m_params) m_params->Release(); delete m_runnable; } }};
0 0
- [code-design]TvServer 之CRunOnce
- [code-design]TvServer 之 CRtk
- [code-design]TvServer 之 database
- code 判断design mode
- code与design
- Code Is Design
- 【code design】thread sync task
- 导TVServer中学到命令
- Design Concepts with Code: A Developer Approach
- Refactoring: Improving the Design of Existing Code
- Asynchronous Code Design with Node.js
- Asynchronous Code Design with Node.js
- Tv App Develop of TvServer Service
- Design Pattern之初见
- Material Design 之 ToolBar
- Material Design之Snackbar
- Material Design之TextInputLayout
- Material Design之Toolbar
- web.xml的filter执行顺序导致的乱码
- Android 仿QQ/微信语音功能。
- 如何将dmp文件导入到Linux系统的oracle数据库中
- 大项目微服务架构设计
- 微信小程序页面传值
- [code-design]TvServer 之CRunOnce
- web.xml中关于Servlet、Filter、Listener的配置
- 标准C的标记化结构初始化语法
- Android默认头像那些事儿
- Git之远程仓库
- ExtJs学习总结(2)
- 使用多路复用套接字I/O提升性能之——ForkingMixIn 《Python网络编程攻略》
- PHPer必知:高并发网站应该如何进行优化?
- Java中堆和栈的区别