Open huenchao opened 4 years ago
我们先打上3个断点:
1: 第1和第2个断点,初始化了static uv_loop_t default_loop_struct
和prepare_handle
,具体可以参考timer的过程,就是handle和loop相互关联。与timer不同的是,它更简单~ 因为不涉及最小堆的处理,直接就是queue的关联,还有cb的初始化。
2.直接进入uv_run(uv_default_loop(), UV_RUN_DEFAULT);
在uv__run_prepare(loop);
处打上断点。如图:
我们发现里面是个宏定义,不影响,看代码:
QUEUE_MOVE(&loop->name##_handles, &queue);
就是把 &loop->name##_handles
从队列里删除,把&queue加进去。
然后while循环,就是一直消费prepare队列里的节点,
本文例子是test-loop-stop.c