首先要設計線程類的使用方式:
例如像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);