如何解决从 C++ 协程中获取协程句柄的最有效方法
我对 C++ 协程相当陌生。当我的应用程序关闭时,我希望能够给任何出色的协同程序一个提示,我希望它们早点完成。我想出的一个解决方案/想法是在承诺上放置一个布尔值,然后我需要一种方法来从协同例程中检查布尔值。
我拼凑了一个相当简单的解决方案(使用 co_await 来获取句柄),但这感觉就像一个笨蛋——编译器应该已经可以从框架内访问句柄了。我想知道是否有一个标准的内在允许访问句柄或承诺?或者是否有人提出了更清洁、更好的解决方案?
struct co_gethandle_awaitable
{
co_gethandle_awaitable()
: m_hWaiter(nullptr)
{
}
bool await_ready() const noexcept
{
return m_hWaiter != nullptr;
}
void await_suspend(std::coroutine_handle<> hWaiter) noexcept
{
m_hWaiter = hWaiter;
m_hWaiter.resume();
}
void await_resume() noexcept
{
}
std::coroutine_handle<> m_hWaiter;
};
coroutine_ref<void> MyFunc()
{
// get my coroutine handle. Ideally this would be a helper function
// but then it would have to be awaitable,which would add further cost.
co_gethandle_awaitable obj;
co_await obj;
std::coroutine_handle<> hMe = obj.m_hWaiter;
// loop.
{
// do work.
if (is_cancelled(hMe))
break;
}
co_return;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。