确保libuv调用异步回调

时间:2017-05-03 09:36:24

标签: multithreading asynchronous callback libuv

documentation of libuv states

  

libuv会合并到uv_async_send()的调用,也就是说,不是每次调用   它将产生回调的执行。例如:if   在回调之前连续5次调用uv_async_send()   调用后,回调只会被调用一次。如果是uv_async_send()   在调用回调后再次调用它,它将再次被调用。

因此,如果我需要保证每次调用uv_async_send()时都会使用正确的有效负载调用我的回调,那么是否有足够的uv_async_t句柄?例如,是保存在堆上分配新的uv_async_t,填充其data成员,调用uv_async_inituv_async_send并在处理回调中使用{关闭句柄{1}}然后将其删除?哪个线程构造uv_close以及哪个线程调用uv_async_t

是否重要?

修改

  1. 根据this discussion确实对哪个帖子调用uv_async_init很重要。
  2. 根据answer to a previous question,只有在调用传递给uv_async_init的密切回调后才需要删除uv_async_t

1 个答案:

答案 0 :(得分:1)

您可以使用线程安全队列和单个异步句柄来完成此操作。当你需要一个被调用的回调时,创建一些软结构来保存它,把它放入队列并调用TextCell,然后在回调过程中排队直到它为空。