[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,但这么搞不太雅观。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值