用过JAVA的人都知道Thread类,这个类可以创建一个线程,并执行一个Runnable对象。其实这个类也是对相关平台线程函数的封装。用C++模拟JAVA中的Thread类,线程函数基于POSIX标准.这个还相当简单,以后准备逐渐完善,开成一个posix标准的C++线程池。废话少说,直接贴代码:
#include <pthread.h>
#include <assert.h>
#include <iostream>
using namespace std;
void* dispatch(void*);
class Runnable{
public:
virtual void Run()=0;
virtual ~Runnable(){};
};
class TestRun:public Runnable{
public:
void Run()
{
cout<<"I am a Test Run!"<<endl;
}
};
class Thread{
public:
Thread(Runnable *task);
void Run();
pthread_t GetId() const
{
return tid_;
}
bool Spawn();
private:
pthread_t tid_;
Runnable *task_;
bool is_start_;
};
Thread::Thread(Runnable *task)
{
task_=task;
Spawn();
}
void Thread::Run()
{
is_start_ = true;
}
bool Thread::Spawn()
{
return pthread_create(&tid_,0,dispatch,(void*)task_);
}
void *dispatch(void *arg)
{
Runnable *task = (Runnable*)arg;
assert(task);
task->Run();
pthread_exit(0);
return (void*)0;
}
int main(void)
{
Runnable *run = new TestRun;
Thread t(run);
cout<<endl;
cout<<"thread ID:"<<t.GetId()<<endl;
delete run;
getchar();
return 0;
}