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

Create boost::thread without callable object

本文关键字:boost 对象 线程 调用 创建      更新时间:2023-10-16

我想创建boost::thread而不将可调用对象传递给构造函数(非任何线程状态)。

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

但是我以后如何传递可调用对象?

void foo() { }

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

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

您可以对共享 ptr 复杂性执行完全相同的操作

您可以在 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);
    }
    }
}