创建没有可调用对象的 boost::线程
Create boost::thread without callable object
我想创建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);
}
}
}
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 如何复制 boost::aligned_storage 对象中的数据?
- 释放 boost::singleton_pool 中的所有对象
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 如何将任何值转换为对象并使用 boost::p roperty_tree json 添加成员
- 动态分配许多 Boost::直方图对象
- 在 boost::p ython 中的 python 对象中运行 python 代码
- 将动态分配对象传递到 boost::any 构造函数中
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- 使用BOOST :: PYTHON返回裸露的类对象列表,这些对象是不可复制的
- 重用 Boost 的计时器对象
- 使用boost :: python手动构建共享对象
- 如何在Boost Serialization中检索多个对象值
- Boost Intervocess:通过迭代通过从结构引用对象的映射进行迭代时
- C++Boost对象序列化-定期保存以保护数据