
Coroutines
文章平均质量分 71
C++协程
mrbone11
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++-关于协程的一些思考
本文探讨了在Qt中使用C++协程时常见的生命周期管理问题,特别是当协程函数被非协程槽函数调用时可能导致协程提前终止的情况。文章通过示例代码展示了问题根源:协程返回的Task对象作为临时变量在槽函数结束时被析构,从而强制终止正在执行的协程。针对这一问题,作者提供了三种解决方案:1) 将槽函数改造为协程并使用co_await等待;2) 将Task对象存储为类成员变量;3) 使用容器管理多个后台任务。每种方案都附有详细代码示例和优缺点分析,最后建议优先采用结构化并发的协程方案。原创 2025-07-28 23:59:49 · 287 阅读 · 0 评论 -
C++-一篇文章入门coroutines协程
本文介绍了C++协程的基本概念和实现原理。协程是可以暂停和恢复执行的函数,通过co_await/co_return关键字实现。编译器会将协程状态保存在堆上,并生成执行代码。文章通过一个最小示例展示了协程的执行流程:1)创建协程帧和promise对象;2)执行initial_suspend;3)遇到co_await时挂起;4)通过coroutine_handle恢复执行;5)最后调用final_suspend结束协程。协程的实现需要满足特定接口要求,包括promise_type和awaiter等组件。原创 2025-07-27 00:36:00 · 1036 阅读 · 0 评论 -
C++-coroutines协程 协程之间相互切换
本文介绍了C++协程切换机制,重点解析了如何通过awaiter实现协程间的切换。关键点包括:1) 使用GetCurrentHandle获取当前协程句柄;2) 通过SwitchTo awaiter实现协程切换,其await_suspend返回目标协程句柄时会自动触发resume();3) 协程A和B相互切换的完整示例;4) 内存管理注意事项,通过Task析构函数自动释放协程句柄避免内存泄漏。文章展示了C++20协程标准中协程切换的核心机制及实现细节,包括协程创建、切换和资源清理的完整流程。原创 2025-07-27 18:18:35 · 133 阅读 · 0 评论 -
C++-coroutines协程 将自定义类型转为awaitable(可等待)类型的两种方法
本文介绍了两种将非awaitable类型转换为可awaitable类型的方法:1)重载operator co_await(),允许在类内或外部定义该运算符;2)定义promise_type::await_transform函数,其优先级高于operator co_await。通过这两种方法,可以让协程等待任意类型,并以QCoro库中的网络请求代码为例进行说明。这些转换方法是实现协程等待自定义类型的基础技术。原创 2025-07-27 17:00:03 · 247 阅读 · 0 评论