将创建线程的API-pthread_create封装成一个线程类
来源:互联网 发布:java md5加密32位小写 编辑:程序博客网 时间:2024/06/07 05:00
之前写的多线程都是在主进程中调用线程的API,这里为每一个线程封装成一个类;创建了一个线程对象,也就是创建了一个线程;
MyThread.h
/*************************************************************************> File Name: MyThread.h> Author: > Mail: > Created Time: 2015年12月14日 星期一 16时23分17秒 ************************************************************************/#ifndef _MYTHREAD_H#define _MYTHREAD_H#include <iostream>#include <pthread.h>#include <string>using std::string;class MyThread{ public: MyThread(); ~MyThread(); void set_name(string name); string get_name(); pthread_t get_pid(); void run(void *(*fun)(void *), void *arg); void join(); void do_something();//not use friend void * thread_routine(void *arg);//not use private: pthread_t pid; string thread_name;};#endif
MyThread.cpp
/*************************************************************************> File Name: MyThread.cpp> Author: > Mail: > Created Time: 2015年12月14日 星期一 16时31分43秒 ************************************************************************/#include "MyThread.h"using namespace std;MyThread::MyThread(){ }MyThread::~MyThread(){ pthread_join(pid, NULL);}void MyThread::set_name(string name){ thread_name = name;}string MyThread::get_name(){ return thread_name;}pthread_t MyThread::get_pid(){ return pid;}void MyThread::run(void *(*fun)(void *), void *arg){ pthread_create(&pid, NULL, fun, arg);}void MyThread::join(){ pthread_join(pid, NULL);}/*not use*/void MyThread::do_something(){ cout << "thread id is " << pid << ", name is " << thread_name << endl;}/*not use*/void * thread_routine(void *arg){ MyThread * pthread; pthread = static_cast<MyThread *>(arg); pthread->do_something(); return NULL;}
main.cpp
/*************************************************************************> File Name: main.cpp> Author: > Mail: > Created Time: 2015年12月14日 星期一 16时13分21秒 ************************************************************************/#include <cstdlib>#include <string.h>#include "MyThread.h"using namespace std;void *thread_fun(void * arg){ cout << "this is thread routine..." << endl; return NULL;}int main(int argc, char *argv[]){ int i = 0, num = 0; if (argc != 2){ cout << "input the number of thread object you want to create...." << endl; exit(-1); } num = atoi(argv[1]); MyThread thread[num]; cout << "I will create " << num << " threads." << endl; for (i = 0; i < num; ++i){ thread[i].set_name("thread"); } for(i = 0; i < num; ++i){ thread[i].run(thread_fun, NULL); cout << thread[i].get_name() << " pid is " << thread[i].get_pid() << " is running.." << endl; } for(i = 0; i < num; ++i){ thread[i].join(); } cout << "main thread exit....." << endl; exit(0);}
0 0
- 将创建线程的API-pthread_create封装成一个线程类
- 线程创建函数pthread_create
- linux 创建线程pthread_create
- pthread_create线程创建的过程剖析
- pthread_create线程创建的过程剖析
- pthread_create()给创建的线程传递参数
- pthread_create线程创建的过程剖析
- pthread_create线程创建的过程剖析
- 对线程创建函数pthread_create的总结
- pthread_create函数创建线程失败的原因
- 线程的创建pthread_create()函数(线程一)
- 将创建进程的API-posix_spawn封装成一个进程类
- pthread_create()创建线程最大个数
- 多线程之pthread_create创建线程
- pthread_create()创建线程最大个数
- pthread_create()创建线程最大个数
- pthread_create Linux函数 线程创建
- linux创建线程之pthread_create
- 继承构造器答疑
- 修改tomcat配置文件启动多个tomcat
- demo简说几种控件一
- 跟我一起写 Makefile(一)
- Android蓝牙BLE之RSSI读写(2)
- 将创建线程的API-pthread_create封装成一个线程类
- 《精通使用AngularJS开发Web App》(三)--- 深入scope,继承结构,事件系统和生命周期
- 同一form表单中,提交两个不同的action
- HBase配置
- uva 10655 - Contemplation! Algebra 【矩阵快速幂】【最坑的输入】
- 2015 ACM/ICPC Asia Regional Shanghai Online --HDU 5478
- 精选强大的常用linux命令
- 深入分析JavaWeb Item18 -- JavaWeb的两种常用开发模式
- elasticsearch mapping 学习