Thread.h
:
#ifndef _THREAD_H_
#define _THREAD_H_
#include<pthread.h>
class Thread{
public:
Thread();
virtual ~Thread();
void Start();
void Join();
private:
static void* ThreadRoutine(void* arg);
virtual void Run() = 0;
pthread_t threadId_t;
};
#endif
thread.cpp
:
#include "Thread.h"
#include<iostream>
using namespace std;
Thread::Thread()
{
cout << "create Thread..." << endl;
}
Thread::~Thread()
{
cout << "destory Tread..." << endl;
}
void Thread::Start()
{
pthread_create(&threadId_t, NULL, ThreadRoutine, this);
}
void* Thread::ThreadRoutine(void* arg)
{
//静态成员函数无法直接调用非静态成员函数(没有this指针)
Thread* thread = static_cast<Thread*>(arg);
thread->Run();
return NULL;
}
void Thread::Join()
{
pthread_join(threadId_t, NULL);
}
Thread_Test.cpp
:
#include"Thread.h"
#include<unistd.h>
#include<iostream>
using namespace std;
class TestThread : public Thread{
public:
TestThread(int count):count_(count)
{
cout << "create TestThread..." << endl;
}
~TestThread()
{
cout << " destory TestThread..." << endl;
}
private:
void Run()
{
while(count_--){
cout << "this is a test..." << endl;
sleep(1);
}
}
int count_;
};
int main()
{
TestThread t(5);
t.Start();
t.Join();
return 0;
}
编译:
g++ -g Thread.h Thread.cpp Thread_test.cpp -o Thread_test -lpthread
输出:
create Thread...
create TestThread...
this is a test...
this is a test...
this is a test...
this is a test...
this is a test...
destory TestThread...
destory Tread...