如果我在类中创建一个std :: async对象,相应的线程运行多长时间?在调用包含类(Bar)的析构函数之前?
class Bar {
public:
Bar() {
handle = std::async(
std::launch::async,
&Bar:foo, this);
}
...
void Foo() {
while (true) {//do stuff//}
}
private:
std::future<void> handle;
};
编辑:
以下示例中的线程运行了多长时间:
class Bar {
public:
Bar() : thread(&Bar:foo, this) {
}
...
void Foo() {
while (true) {//do stuff//}
}
private:
std::thread thread;
};
答案 0 :(得分:2)
异步操作一直运行,直到函数返回。如果你有一个无限循环,它将永远运行。真的没有一种安全的方式可以中止&#34;异步操作。你必须使用线程通信告诉它退出。
如果您销毁相关的未来,它将一直阻止,直到操作完成。
如果实现使用线程池,那么支持该操作的线程可能会超出该范围,但您不必担心这一点。