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_init
和uv_async_send
并在处理回调中使用{关闭句柄{1}}然后将其删除?哪个线程构造uv_close
以及哪个线程调用uv_async_t
?
修改
uv_async_init
很重要。uv_async_init
的密切回调后才需要删除uv_async_t
。答案 0 :(得分:1)
您可以使用线程安全队列和单个异步句柄来完成此操作。当你需要一个被调用的回调时,创建一些软结构来保存它,把它放入队列并调用TextCell
,然后在回调过程中排队直到它为空。