[libuv]uv_loop_close和uv_stop的区别

作者:@玄冬Wong

uv_loop_close:是释放掉uv_loop_t*指针相关的资源;

uv_stop:是退出当初由uv_run()运行的正在阻塞中的逻辑;

当程序完全退出需要清理全部uv相关的资源时,具体清理方式如下:

1,这里假设你在函数A中执行了初始化的逻辑

uv_loop_t* loop = malloc(sizeof *loop);
uv_loop_init(loop);

const int r = uv_run(loop, UV_RUN_DEFAULT);
ASSERT(0 == r);

 ,

2,然后假设需要在函数B中终止uv_run

uv_stop(loop);

3,上面stop以后不能马上执行uv_loop_close(),应该再定义一个函数C,当上面函数A中退出uv_run之后调用函数C,在函数C中free掉loop指针

uv_loop_close(loop);
free(loop);

 为什么不能直接在函数B中close掉?因为当执行uv_stop之后,uv_run并不能马上退出,而是要等待其内部循环的下一个iteration到来时才会退出;如果提前free掉loop就会导致函数A中的loop指针失效。当然也可以sleep几十毫秒然后再close,但这么搞不太雅观。

猜你喜欢

转载自aigo.iteye.com/blog/2290773
Uv
今日推荐