std :: async运行多长时间?

时间:2016-10-17 15:19:39

标签: multithreading c++11 stdasync

如果我在类中创建一个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;

};

1 个答案:

答案 0 :(得分:2)

异步操作一直运行,直到函数返回。如果你有一个无限循环,它将永远运行。真的没有一种安全的方式可以中止&#34;异步操作。你必须使用线程通信告诉它退出。

如果您销毁相关的未来,它将一直阻止,直到操作完成。

如果实现使用线程池,那么支持该操作的线程可能会超出该范围,但您不必担心这一点。