怎么设计自己的线程类?
首先要设计线程类的使用方式:
例如像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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。