將建立執行緒的API-pthread_create封裝成一個執行緒類
之前寫的多執行緒都是在主程式中呼叫執行緒的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);
}
相關文章
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 執行緒的建立及執行緒池執行緒
- 執行緒池建立執行緒的過程執行緒
- 畫江湖之 PHP 多執行緒開發 【建立一個新的執行緒】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [建立一個新的執行緒]PHP執行緒
- 認識執行緒、建立執行緒寫法執行緒
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- MFC多執行緒的建立,包括工作執行緒和使用者介面執行緒執行緒
- thread 描述執行緒的一個類thread執行緒
- 建立一個執行緒池配置類 ThreadPoolConfig執行緒thread
- 執行緒、協成執行緒
- 多執行緒-以前的執行緒安全的類回顧執行緒
- 執行緒池的建立和使用,執行緒池原始碼初探(篇一)執行緒原始碼
- 加入一個執行緒執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 執行緒(一)——執行緒,執行緒池,Task概念+程式碼實踐執行緒
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- Java執行緒池一:執行緒基礎Java執行緒
- 多執行緒系列(一):認識執行緒執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- 怎樣停止一個正在執行的執行緒執行緒
- 執行緒和執行緒池執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒 執行緒池 Task執行緒
- 執行緒與多執行緒執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 【原創】Java多執行緒初學者指南(2):用Thread類建立執行緒Java執行緒thread
- JAVA中執行緒的建立Java執行緒
- jdk建立執行緒的方式JDK執行緒
- Win32執行緒——等待另一個執行緒結束Win32執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI