首先要设计线程类的使用方式:
例如像java建立和启动线程java
class Thread {}; Thread t = new Thread(线程方法) t.start() t.join()
class Thread { public: typedef boost::function<void ()> Func; Thread(const Func& func); ~Thread(); void start(); void join(); private: Func func_; phtread_id pid_; };
基于对象设计方式:boost::function + boost::bind函数
start() 是一个Thread的方法,而启动线程使用的是pthread_create,须要传入的是一个C函数,因此须要一个单独的C函数startThread去作启动线程这个工做。线程
void *startThread(void * args) { ThreadData * data = static_cast<ThreadData*>(args); data->run(); }
startFunc函数中不可能知道Thread中的方法,因此须要设计一个单独的线程数据类ThreadData,这个ThreadData是个内部类,它会获得Thread类中的线程要执行方法,而后传递给startFunc,最后startFunc会调用ThreadData的run方法设计
ThreadData * data = new ThreadData(func_); pthread_create(&tid_, NULL, startThread, data);