【发布时间】:2017-01-06 04:54:00
【问题描述】:
我的理解是uv_async单次使用的正确用法如下:
- 分配
uv_async_t句柄; - 在分配的句柄上调用
uv_async_init; - 致电
uv_async_send安排回调; - 使用
uv_close注销句柄; - 删除关闭回调中的
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);
});
有其他人这样做吗,它被认为是安全的吗?
【问题讨论】:
标签: c asynchronous libuv