创建没有可调用对象的boost :: thread

时间:2014-12-15 08:57:25

标签: c++ boost

我想在不将可调用对象传递给构造函数(非任意线程状态)的情况下创建boost :: thread。

boost::shared_ptr<boost::thread> ThreadHandle_.reset( new boost::thread() );

但我怎么能在以后传递可调用对象?

2 个答案:

答案 0 :(得分:1)

您可以在boost::thread之上创建自己的包装器,类似于:

class QThread
{
public:
    QThread();
    virtual ~QThread();
    void operator()(const boost::function0<void>& action);

  void Join();

private:
    void Process();

    std::list<boost::function0<void> > m_Queue;
    bool m_Destroy;
    boost::condition_variable_any m_Available;
    boost::mutex     m_QueueLock;
    boost::barrier   m_Barrier;
    boost::thread    m_Thread;
};

以一种等待你做某事的方式实现Process(一个任务,作为队列中的可调用函数)

void QThread::Process()
{
    m_Barrier.wait();
    boost::mutex::scoped_lock lock(m_QueueLock);
    while(!m_Destroy)
    {
        while(!m_Destroy && !m_Queue.empty())
        {
            boost::function0<void> action = m_Queue.front();
            m_Queue.pop_front();
            lock.unlock();
            action();
            lock.lock();
        }

    if (!m_Destroy)
    {
        m_Available.wait(lock);
    }
    }
}

答案 1 :(得分:1)

void foo(){}

boost :: thread th; // not-any-thread

th = boost :: thread(foo); //绑定

您可以使用共享ptr并发症

完全相同