2013-08-28 62 views
0

今天我想使用boost :: scoped_ptr指向boost :: thread。提升作用域指针提升线程

在我Thread.hboost::scoped_ptr<boost::thread> m_thread,在我Thread.cpp有一个功能create()其中的boost ::线程的创建应该发生。 我试过Thread::m_thread (new boost::thread(attr, boost::bind(%Thread::run, this)));,但毫不奇怪,它没有奏效。

我无法弄清楚自己(或通过使用boost文档)我该怎么做,因为我不完全了解scoped_ptr和它的工作原理。 之前我曾经使用过一个原始指针,它工作正常,但我现在不允许使用它。

谢谢你的时间!

回答

1

我不知道是什么样的错误你得到了,试试这个:

class Thread { 
public: 
    Thread() : thread_(new boost::thread(boost::bind(&Thread::run, this))) { 
    } 

    void run() { 
    } 

    ~Thread() { 
    thread_->join(); 
    } 

private: 
    boost::scoped_ptr<boost::thread> thread_; 
}; 

int main() { 
    Thread thread; 
} 

但不要忘了,该线程可能会开始前构造结束了他的工作。

+0

这几乎是我所尝试的以及我的问题中所陈述的内容,如果我没有遗漏某些东西。 ;) 我的错误是关于m_thread的定义和它说:_error C2064:术语不计算为服用1 arguments_ 这是有关与'主题:: m_thread线(新的boost ::线程函数(ATTR, boost :: bind(&Thread :: run,this)));' – DenverCoder21

+0

嘿,'m_thread'在** Thread.h **中声明,并在** Thread.cpp **中调用'create()'函数。然而,这个问题(很可能是)在创建一个线程对象之后,'m_thread'已经在内部定义了一个默认值,因此不能在'create()'函数中被覆盖。我在'create()'中创建了另一个名为'tmp'的'scoped_ptr',并将'boost :: thread'赋值给它,然后用'm_thread'交换它,并在完成'创建()'。可能不是最美丽的事情,但为我工作。 感谢您的帮助! – DenverCoder21