0

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

};
4

1 回答 1

2

异步操作一直运行到函数返回。如果你有一个无限循环,它将永远运行。确实没有“中止”异步操作的安全方法。您必须使用线程通信来告诉它退出。

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

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

于 2016-10-17T15:27:39.823 回答