V S*_*yas 5 c++ multithreading destructor
这是我的问题的延续:构造函数中的线程创建
现在我已经成功地在构造函数中创建了一个线程,我知道它必须被加入。在开发 API 时,我无法控制 main 函数,因此我无法在那里加入它。
考虑到该类的实例化对象具有应用程序的生命周期,在类析构函数中加入线程是否正确?
你可以这么做。但是,您真的对启动新线程的机制感兴趣,还是对异步执行某些操作的效果感兴趣?如果是后者,则可以转向更高级别的async机制:
#include <iostream>
#include <future>
void bar()
{
std::cout << "I'm bar" << std::endl;
}
class foo
{
public:
foo() :
m_f(std::async(
std::launch::async,
bar))
{
}
~foo()
{
m_f.get();
}
private:
std::future<void> m_f;
};
int main ()
{
foo f;
}
Run Code Online (Sandbox Code Playgroud)
您在构造函数中要求bar异步启动。您不关心自己管理线程 - 让库来处理它。
将结果放入future成员中。
在dtor,get未来。
| 归档时间: |
|
| 查看次数: |
4851 次 |
| 最近记录: |