线程
来源:互联网 发布:联通网络如何报修 编辑:程序博客网 时间:2024/06/06 20:53
#include <pthread.h>using namespace std;#pragma comment(lib, "pthreadVC2.lib")class SwyThread{public:SwyThread(bool joinable = true): m_joinable(joinable){memset(&m_thread, 0, sizeof(m_thread));}virtual ~SwyThread() {}private:DISALLOW_COPY_AND_ASSIGN(SwyThread);// 默认拷贝构造函数设为private 禁用public:int start(){int err = pthread_create(&m_thread, NULL, SwyThread::threadEntry, this);return err;}void join(){//joinable状态 完了后自己pthread_join下pthread_join(m_thread, NULL);}inline bool joinable(){return m_joinable;}protected:virtual void run() {}private:static void* threadEntry(void* param);private:bool m_joinable;pthread_t m_thread;};void* SwyThread::threadEntry(void* param){SwyThread* pthread = static_cast<SwyThread*>(param);if (pthread != NULL){if (!pthread->joinable()){//unjoinable则退出会自己释放pthread_detach(pthread_self());//状态改为unjoinable 确保资源的释放}pthread->run();}else{//自己分离自己 pthread_self就是自己的线程idpthread_detach(pthread_self());}return NULL;}class TaskA :public SwyThread{public:TaskA(int n) { name = n; }~TaskA() {}protected:virtual void run();public:void stopThread(){m_running = false;join();//linux线程和 windows不同 pthread状态有 joinable和unjoinable//如果joinable线程退出或者pthread_exit,自己不会释放占用的堆栈和线程描述符(8k多空间)//只有当调用了pthread_join后这些资源才释放}private:bool m_running;int name;};void TaskA::run(){m_running = true;int i = 0;while (m_running){cout << "i am " << name << endl;Sleep(1000);if (i++ > name)stopThread();}}int main(){TaskA* a = new TaskA(8);TaskA* b = new TaskA(15);a->start();b->start();}
阅读全文
0 0
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- WEB-INF
- maven clean install 错误: 编码GBK的不可映射字符
- [实习笔记]Linux学习总结------非正式版
- iOS 去除PickerView ,DatePickerView黑色分割线
- poj 1611 The Suspects(并查集基础题)
- 线程
- 伟大的领袖如何激励行动
- java 中@Override的作用
- C++编程->pcap文件读取源码
- linux远程连接linux
- JAVA按模版导出PDF文件,含条码,二维码,表格
- Connector/J connection property 'autoReconnect=true' to avoid this problem
- 你的Dom4j-----DOM4j解析用法详解
- WordPress数据备份