Boost-在多个会话中对多个进程进行线程处理
Boost - Threading several processes over several sessions
我目前在用boost处理几个不同的进程时遇到了几个问题。我对线程还很陌生,所以请耐心等待。希望格式也足够好。
我定义了两个线程。
boost::thread m_thread1;
boost::thread m_thread2;
与这些线程相关联的是三个期货和两个打包任务
boost::packaged_task<bool> ptaskBool;
boost::packaged_task<double> ptaskDouble;
boost::unique_future<bool> futureBool;
boost::unique_future<double> futureDouble1;
boost::unique_future<double> futureDouble2;
这两个线程都是在while循环中定义的
while(running)
{
//some code
if(!thread1running)
{
ptaskBool = boost::packaged_task<bool>(boost::bind(/*some objects function*/));
futureBool = ptaskBool.get_future();
m_thread1 = boost::thread(boost::move(ptaskBool));
thread1running = true;
}
if(!thread2running && initial)
{
ptaskDouble = boost::packaged_task<bool>(boost::bind(/*some objects function*/));
futureDouble = ptaskDouble.get_future();
m_thread2 = boost::thread(boost::move(ptaskDouble));
thread2running = true;
}
else if(!thread2running)
{
ptaskDouble = boost::packaged_task<bool>(boost::bind(/*some different function*/));
futureDouble2 = ptaskDouble.get_future();
m_thread2 = boost::thread(boost::move(ptaskDouble));
initial = true;
thread2running = true;
}
这是对我现有内容的简化,但非常相似。我的下一个代码是关于未来的。
if(futureBool.is_ready())
{
m_bool = futureBool.get();
thread1running = false;
}
if(futureDouble.is_ready())
{
m_double = futureDouble.get();
std::cout << "Result: " << m_double << std::endl;
thread2running = false;
//have tried several things like a join here to no avail
}
if(futureDouble2.is_ready())
{
m_double = futureDouble2.get();
std::cout << "Result: " << m_double << std::endl;
thread2running = false;
}
}//end while
我在标题中所说的会话的意思是,在后台有一些会话处理来告诉线程何时不创建。
还有其他代码进行一些处理和标志检查,但与我的问题无关。我显然误解了正在发生的事情。每个线程第一次运行时,它们就完成了任务。第二次程序崩溃了。
我很幸运地将每个线程变量作为指针,并每次定义一个新线程,而不是重新定义每个线程。这很有效,但我无法在完成后删除每个线程。我在这里不明白什么?函数返回结果后,线程实际在做什么?
auto_ptr是确保线程最终被删除的好方法。也是来自C++11的CCD_ 1。
根据:http://www.cplusplus.com
注意:此类模板(auto_ptr)自C++11起已弃用。uniqueptr是一个新功能,具有类似的功能,但具有改进的安全性(没有伪拷贝分配)、添加的功能(删除程序)和对阵列的支持。有关更多信息,请参阅unique_ptr。
有关使用auto_ptr的示例,请参阅有效使用auto_ptr。
相关文章:
- 异常属于C++中的线程还是进程
- 将更高的优先级设置为 boost::asio 线程处理进程
- 从不同进程中的另一个线程挂起/恢复线程或进程
- 多线程:线程或进程.h - C++
- BOOST线程:线程还是进程
- 将进程的执行从线程1转移到线程2
- std::async 如果线程是从 DLL 创建的,则会阻止进程退出?
- 优化吞吐量:多线程与多进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 为不受支持的平台调整Boost线程/进程
- gdb是如何连接到多线程进程的
- 提振.Asio复合操作在单线程和多线程进程
- gdb如何连接到多线程进程
- 独立的多线程进程同时阻塞
- 在多线程进程中处理信号的示例
- 多线程进程中的信号处理
- 在Linux/ c++中,发送给线程/进程的信号是否使其变为活动状态?
- 如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据
- C++线程/进程标识符