作为一个 lambda post 类型的调度器实现, 首先要打理的, 肯定是的函数对象如何投递, 如何保存, 如何执行了....我们先来回顾一下上一篇中的调度概览图:
如上图所示, ASIO 调度的核心对象是 io_context, 作为通用任务调度器的时候, 我们也可以直接把 io_context 看作是 execution_context...run(), 这样在外围有work_guard的情况下, 通过run()内部的for()循环, 推送到 scheduler::op_queue_ 上的所有operation会被依次执行, 从而正确驱动整个调度器的工作...这也是比较常见的情况 , 比如对于游戏来说, 主线程一般除了调度器的执行, 还包含其他逻辑的执行, 这个时候, 就比较适合使用上面的几种情况来组织主循环了, 下面给出一个简单的示例:
while(!..., 可以与其他代码更好的组合协同工作.
2.5 run()过程总结
整个run()过程都是围绕调度器的任务队列(op_queue_)来进行的,通过阅读asio相关的代码, 我们可以看到, asio对锁的使用非常注意