【问题标题】:C++20 co_await sleep?C++20 co_await 睡眠?
【发布时间】:2023-04-05 08:12:01
【问题描述】:

使用 C++20 协程,作为一个玩具示例,我认为创建一个返回 task<T> 的协程很容易,co_awaits 在 co_returning 之前休眠。看起来 Folly 可以做到?:https://blog.the-pans.com/build-folly-coro/ 但也许 cppcoro 不能?

我意识到 C++20 协程是一个原始编译器功能,还没有标准库。 cppcoro 是否支持等待睡眠?如果没有,我可以在 Compiler Explorer 上使用其他库(或者是否有单页机)?

【问题讨论】:

    标签: c++-coroutine


    【解决方案1】:

    您可以创建一个返回等待对象的函数:

    template <typename DurationT>
    auto sleep(const DurationT& d) {
    
        struct awaitable : std::suspend_always {
            DurationT duration_;
    
            awaitable(const DurationT& duration)
            : duration_(duration) {}
    
            void await_suspend(std::coroutine_handle<>) {
                std::this_thread::sleep_for(duration_);
            }
        };
    
        return awaitable {d};
    }
    

    或者从你的承诺类型中重载await_transform

    示例:https://godbolt.org/z/hKP7oezv7

    【讨论】:

      猜你喜欢
      • 2021-05-11
      • 1970-01-01
      • 2020-07-26
      • 2012-04-07
      • 2012-12-17
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多