作者:@玄冬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,但这么搞不太雅观。