基本概念
异步操作:指的是不会立即完成,而是会在将来的某个时间点完成的操作。在 C++ 中,异步操作可以通过多种方式实现,比如使用 std::async、std::thread 配合 std::promise/std::future,或者第三方库如 Boost.Asio。
一、std::future
std::future:是一个模板类,用于表示异步操作的结果。可以通过 std::future 的成员函数来查询异步操作是否完成,等待异步操作完成,并获取其结果。
常用函数:
1. get()
功能:阻塞当前线程,直到与 std::future对象关联的异步操作完成,并返回异步操作的结果。如果异步操作抛出了异常,get() 会重新抛出该异常。
注意:get()方法只能被调用一次。调用后,std::future 对象将变为无效状态。
2. wait()
功能:阻塞当前线程,直到与std::future 对象关联的异步操作完成。它不返回任何结果,也不抛出异步操作中发生的异常(如果有的话)
3. wait_for(duration)
功能:尝试阻塞当前线程,直到与 std::future对象关联的异步操作完成或指定的时间间隔过去。
- 如果异步操作在指定时间内完成,则返回std::future_status::ready;
- 如果时间间隔过去但异步操作尚未完成,则返回std::future_status::timeout;
- 如果 std::future对象关联的共享状态已经无效(例如,由于调用了get()),则返回std::future_status::deferred_no_state。 参数:duration是一个时间段,指定等待的最大时间。
4. wait_until(time_point)
功能:与 wait_for类似,但它是基于绝对时间点而不是时间段来等待。