首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用uv_close而不是uv_async_send进行单一用途的uv_async回调?

使用uv_close而不是uv_async_send进行单一用途的uv_async回调?
EN

Stack Overflow用户
提问于 2017-01-06 04:54:00
回答 1查看 1.5K关注 0票数 0

我的理解是,正确使用uv_async一次使用如下:

  1. 分配uv_async_t句柄;
  2. 调用分配句柄上的uv_async_init
  3. 调用uv_async_send来调度回调;
  4. 使用uv_close注销句柄;
  5. 删除关闭回调中的uv_async_t句柄;

例如:

代码语言:javascript
运行
复制
    uv_async_t *handle = (uv_async_t*)malloc(sizeof(uv_async_t));
    uv_async_init(&uvLoop, handle, [](uv_async_t *handle) { 
        // My async callback here
        uv_close((uv_handle_t*)handle, [](uv_handle_t* handle) {
            free(handle);
        });
    });
    uv_async_send(&asyncCb->uvAsync);

根据我收集的信息,uv_close在uvLoop中被异步调用。因此,我想做以下工作,以避免在事件循环中排队进行两个回调:

代码语言:javascript
运行
复制
    uv_async_t *handle = (uv_async_t*)malloc(sizeof(uv_async_t));
    uv_async_init(&uvLoop, handle, nullptr);
    uv_close((uv_handle_t*)handle, [](uv_handle_t* handle) {
        // My async callback here
        free(handle);
    });

还有人这样做吗,这被认为是安全的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 07:19:38

你的目标是什么?需要使用多个线程吗?如果是这样的话,那就行不通了,因为uv_close并不是线程安全的。

如果您只想在循环中调度将来的回调,请检查uv_idle_t。您还可以使用队列并根据需要启动/停止句柄,而不是随后创建和销毁句柄。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41499152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档