c++的thread类(c++线程简单用法)
2012-06-06 15:37
447 查看
[align=center][/align] 最近看了一个Thread类(忘记在哪里看的了),感觉不错。 创建线程时线程对应的函数必须是类的静态成员,由于静态成员无法访问类的非静态成员,我从前都是把对象的指针作为参数传递给线程函数来避免这个问题,但是在逻辑上线程函数还需要访问对象的私有成员,总是感觉代码很不优雅。这个Thread类同java中的Thread类在用法上比较类似,使用一种比较优雅的方法避免了上面的问题。使用时只要从Thread派生一个子类并实现线程运行的函数 void run() 就可以了。还是看代码吧: 先把使用方法贴上来: C++语言[/u]: Codee#880 01 #include<iostream> 02 03 #include "Thread.h" 04 05 class MyThreadClass: public Thread 06 { 07 private: 08 int a; 09 public: 10 MyThreadClass( ){ 11 a = 0; 12 } 13 ~MyThreadClass(){ 14 } 15 virtual void run(); 16 }; 17 18 void Receiver::run(){ 19 a++; 20 std::cout<<a<<std::endl; 21 } 22 23 int main(int argc, char * argv[]) 24 { 25 MyThreadClass myThread; 26 myThread.start();//创建了一个线程,运行函数run() 27 myThread.join();//等待线程结束 28 return 0; 29 } 下面是Thread类的实现,为了阅读清晰,删减了很多内容 C++语言[/u]: Thread.h 01 #ifndef COMMUNITCATE_H 02 #define COMMUNITCATE_H 03 04 05 06 #include "pthread.h" 07 08 09 class Thread 10 { 11 protected: 12 pthread_t _tid; 13 static void* run0(void* opt); 14 void* run1();//如果类中有保存线程状态的变量,可以在这个函数中可以进行更改操作 15 public: 16 Thread(); 17 ~Thread(); 18 /** 19 * 创建线程,线程函数是 run0 20 * 21 * @return 成功返回 ture 否则返回 false 22 */ 23 bool start(); 24 /** 25 * join this thread 26 * 27 */ 28 void join(); 29 virtual void run(){ 30 31 } 32 }; 33 34 35 #endif C++语言[/u]: Thread.cpp 01 #include "Thread.h" 02 03 Thread::Thread(){ 04 05 } 06 07 Thread::~Thread(){ 08 09 } 10 11 12 13 void* Thread::run0(void* opt) 14 { 15 Thread* p = (Thread*) opt; 16 p->run1(); 17 return p; 18 } 19 20 void* Thread::run1() 21 { 22 _tid = pthread_self(); 23 run(); 24 _tid = 0; 25 pthread_exit(NULL); 26 } 27 28 bool Thread::start() 29 { 30 return pthread_create(&_tid, NULL, run0, this) == 0; 31 } 32 33 void Thread::join() 34 { 35 if( _tid > 0 ){ 36 pthread_join(_tid, NULL); 37 } 38 } |
相关文章推荐
- c++的thread类(c++线程简单用法)
- moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
- Thread线程的方法用法,有代码例子,简单易懂
- Android 中 C++ Thread线程用法
- Android 中 C++ Thread线程用法
- Android 中 C++ Thread线程用法
- (swift) iOS线程一 ——Thread接口简单用法
- moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
- moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)
- C++:const用法的简单总结
- C++线程应用【thread类】
- c++ 11 random库的简单用法
- c++ stringstream 简单用法
- C++学习笔记--线程简单应用
- No4.线程中断+Thread.sleep()的用法
- Eigen: C++开源矩阵计算工具——Eigen的简单用法
- 简单实例化解析安卓Thread线程
- thread包 一个简单的线程实例
- C++ 实现类似Qt和Java的线程用法
- C和C++中static用法简单总结