std::async和std::future异步编程

基本概念

异步操作:指的是不会立即完成,而是会在将来的某个时间点完成的操作。在 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类似,但它是基于绝对时间点而不是时间段来等待。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值