我想在不将可调用对象传递给构造函数(非任意线程状态)的情况下创建boost :: thread。
boost::shared_ptr<boost::thread> ThreadHandle_.reset( new boost::thread() );
但我怎么能在以后传递可调用对象?
答案 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并发症
完全相同