`
aigo
  • 浏览: 2547314 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

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

 

分享到:
评论

相关推荐

    libuv_libuv_接码利用_

    libuv源代码工程,可直接编译使用,最完整的工程。

    libuv_message_framing:libuv的消息框架

    uv_msg_init (loop, socket, UV_TCP); Unix域套接字或命名管道的流初始化 uv_msg_t * socket = malloc( sizeof ( uv_msg_t )); uv_msg_init (loop, socket, UV_NAMED_PIPE); 传送讯息 uv_msg_send (( uv_msg_write_t...

    spawn:一个简单的“ uv_spawn”包装器API即可执行和管理子进程,并行异步PHP用于阻止IO

    一个简单的uv_spawn包装器API,用于执行和管理子进程(用于阻止I / O的并行/异步PHP)。 该软件包使用Node.js库的 (PHP扩展 )的功能。 它的uv_spawn函数用于启动进程。 性能是一个更好的选择到了pcntl扩展,或...

    libuv_tcp, 使用libuv的tcp服务器和客户端包.zip

    libuv_tcp, 使用libuv的tcp服务器和客户端包 欢迎来到libuv_tcp维基 !简介:libuv_tcp是一个包含tcp服务器和客户端的C 类,它使用libuv包。用法:请参阅 [ test_tcpserver.cpp ] 1 和 [ test_tcpclient.cpp

    uv_callback:libuv线程通信

    它是uv_async的替代品,但有一些区别: 它支持合并和非合并调用它支持同步和异步调用它支持将参数传递给被调用的函数支持结果通知回调使用范例将进度发送到主线程在这种情况下,如果工作运行得太快,则调用可以并且...

    node-dlopen:本地绑定到 libuv 的 uv_dlopen() 和朋友

    本地绑定到 libuv 的 uv_dlopen() 和朋友 该模块提供对 libuv 的dlopen() 、 dlclose() 、 dlsym()和dlerror()函数的访问。 还导出了一个高级面向对象的Library类。 安装 使用npm安装: $ npm install dlopen ...

    libuv udptcp的封装.rar

    使用libuv,可以非常方便的创建tcp服务端,基本上除了初始化,其他所有的处理都是在回调函数中处理的。可以非常轻松的实现异步读写。其中需要注意的是,uv_read_start的第二个参数,uv_alloc_cb回调函数,在每次接收...

    libuv_tcp的基于libuv库的c++实现.zip

    基于libuv库的c++实现的tcp通讯,包括客户端和服务器

    libuv关于TCP UDP以及文件操作的封装测试

    libuv关于TCP UDP以及文件操作的封装测试,便于以后进行扩展使用

    libuv_ex:libuv_ex

    libuv_ex 使用libuv lib的示例。

    bymc_libuv_1.34.2_source_code_analysis_v02.pdf

    以uvCat为例讲解对Libuv 1.34.2 源码进行了流程上的讲,主要是帮助刚开始学习的快速入门 ---- 介绍可参考本贴:https://blog.csdn.net/tanmx219/article/details/104114883

    libuv1.9加gyp3.3

    2016最新版的libuv node_gyp (包含了gyp包) 里面带有详细编译说明及错误修改,支持下,一点小分

    net_uv:使用C ++封装libuv的网络库

    net_uv:使用C ++封装libuv的网络库

    uv_server:一个基于 libuv 的小型 C++ 包装器

    uv_server尝试用简单的C++封装libuv库,学习性质。介绍:通过改造libuv自带的echo-server,封装了Session(客户socket)和NetImpl两个模块,所有libuv的实现细节都在这两个模块里面,接口文件在include/...

    libuv静态库

    iOS版本libuv.a静态库,支持i386 armv7 armv7s x86_64 arm64

    uv_ssl_t:libuv的可链接SSL实现

    uv_ssl_t 高度不稳定 对于可链接的SSL实现基于 。 为什么? 异步执行SSL很难。 该项目提供了与的事件循环模型配合使用的抽象接口。 如何? 解耦的接口后端由提供,并在该项目中得到广泛使用。 提供示例。 执照 ...

    libuv-vc6-master_libuv在xp下使用vc6.0_

    libuv 在xp系统下的 vc6.0项目 兼容win xp

    uv_zip:libuv 的 libzip 绑定

    通过模仿uv_fs_* API 使异步。 用法 见 测试 $ ./configure [...] $ make test [...] * open_failure (0.9ms) * open_from_fd (0.9ms) * missing_file (0.2ms) * read_file (0.2ms) 注意:此绑定并...

    libuv-dox, 记录libuv的类型和方法,主要是通过读取'uv.h'.zip

    libuv-dox, 记录libuv的类型和方法,主要是通过读取'uv.h' libuv-dox记录 libuv的类型和方法,主要通过读取 uv.h 。组织在 uv.h 中找到的信息已经分为三个类别:类型:回调函数方法示例添加了用于说明如何使用API的...

    libuv documentation.pdf

    libuv 的文档提供了详细的设计概述、安装指南、API 文档和示例代码等。 libuv 的特点可以总结为: * 跨平台支持,支持多种操作系统和架构。 * 全功能的事件循环,支持多种 I/O polling 机制。 * 异步 TCP 和 UDP ...

Global site tag (gtag.js) - Google Analytics