gpt4 book ai didi

c - 使用 uv_close 而不是 uv_async_send 进行一次性 uv_async 回调?

转载 作者:行者123 更新时间:2023-11-30 15:01:21 25 4
gpt4 key购买 nike

我的理解是,单次使用uv_async的正确使用方式如下:

  1. 分配uv_async_t句柄;
  2. 在分配的句柄上调用uv_async_init
  3. 调用uv_async_send来安排回调;
  4. 使用uv_close取消注册句柄;
  5. 删除关闭回调中的uv_async_t句柄;

例如:

    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 中被异步调用。因此,我倾向于执行以下操作以避免在事件循环中排队两个回调:

    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);
});

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

最佳答案

您想要实现什么目标?需要使用多线程吗?如果是这样,那将不起作用,因为 uv_close 不是线程安全的。

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

关于c - 使用 uv_close 而不是 uv_async_send 进行一次性 uv_async 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com