线程Thread

怎么设计本身的线程类?

首先要设计线程类的使用方式:
例如像java建立和启动线程java

class Thread {};

Thread t = new Thread(线程方法)
t.start()
t.join()

线程类基本的对象:

  1. 线程的方法(线程要作什么)
  2. 线程的标识(线程本身是谁)
  3. 线程的参数(这个要传递给线程方法)
  4. 线程的启动(线程具有的性质)
  5. 是否等待子线程(线程具有的性质)
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);
相关文章
相关标签/搜索