如何解决C++20 co_await 睡眠?
使用 C++20 协程,作为一个玩具示例,我认为很容易制作一个返回 task<T>
的协程,该 co_await
在 co_return
ing 之前是一个睡眠。看起来 Folly 可以做到吗?:https://blog.the-pans.com/build-folly-coro/ 但也许 cppcoro 不能?
我意识到 C++20 协程是一个没有标准库的原始编译器特性。 cppcoro 是否支持等待睡眠?如果没有,我是否可以在 Compiler Explorer 上使用其他库(或者是否有单页程序)?
解决方法
您可以创建一个返回可等待对象的函数:
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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。