public member function
<future>

std::future::wait

void wait() const;
等待就绪
等待*共享状态*变为*就绪*。

如果*共享状态*尚未就绪(即提供者尚未设置其值或异常),则函数会阻塞调用线程,并等待其就绪。

一旦*共享状态*变为*就绪*,函数将解除阻塞并返回,而不读取其值,也不抛出其设置的异常(如果有)。

所有可见的副作用将在提供者使*共享状态*就绪与此函数返回之间进行同步。

参数



返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// future::wait
#include <iostream>       // std::cout
#include <future>         // std::async, std::future
#include <chrono>         // std::chrono::milliseconds

// a non-optimized way of checking for prime numbers:
bool is_prime (int x) {
  for (int i=2; i<x; ++i) if (x%i==0) return false;
  return true;
}

int main ()
{
  // call function asynchronously:
  std::future<bool> fut = std::async (is_prime,194232491); 

  std::cout << "checking...\n";
  fut.wait();

  std::cout << "\n194232491 ";
  if (fut.get())      // guaranteed to be ready (and not block) after wait returns
    std::cout << "is prime.\n";
  else
    std::cout << "is not prime.\n";

  return 0;
}

输出

checking...
194232491 is prime.


数据竞争

访问了 future 对象。
共享状态 作为 原子操作 被访问(不会导致数据竞争)。

异常安全

在一个*无效*的<a href="/future">future</a>对象上调用此成员函数,会产生*未定义行为*(尽管库实现可能会检测到这一点并抛出具有<a href="/future_errc">no_state</a>*错误条件的*<a href="/future_error">future_error</a>)。

另见