- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在阅读 The libuv book ,但是关于检查和准备观察者的部分是不完整的,所以我找到的唯一信息是在 uv.h 中:
/* * uv_prepare_t is a subclass of uv_handle_t. * * Every active prepare handle gets its callback called exactly once per loop * iteration, just before the system blocks to wait for completed i/o. */
和
/* * uv_check_t is a subclass of uv_handle_t. * * Every active check handle gets its callback called exactly once per loop * iteration, just after the system returns from blocking. */
我想知道 libuv 的 check and prepare watchers 有没有什么特殊用法
我正在编写一个 native node.js 绑定(bind)到需要处理从不同线程触发的事件的 c++ 库,因此自然应该从主线程调用回调。我尝试使用 uv_async_t
,但是 libuv 不保证每次 uv_async_send
都会调用一次回调,所以这对我不起作用。
这就是为什么我决定使用我自己的线程安全事件队列,我想定期检查它。所以我想知道是否可以为此目的使用支票或准备观察者。
实际上,我当前的解决方案确实使用了 uv_async_t
观察器 - 每次我收到一个事件时,我都会将其放入队列中并调用uv_async_send
- 所以当最终调用回调时,我处理当前队列中的所有事件。
我对这种方法的担忧是,许多事件实际上可能会排队等待回调被触发,并且可能同时失效(所谓失效,我的意思是此时处理它们变得毫无意义)。
所以我希望能够尽可能频繁地检查事件队列 - 观察者可以提供哪些检查/准备,但也许在每次事件循环迭代时都这样做(并锁定互斥体)是一种矫枉过正?
而且,更重要的是,也许它们应该服务于某些更特殊的目的,而不仅仅是保护每循环迭代一次的回调调用?
谢谢
最佳答案
您可以使用准备句柄来检查队列中的事件,并使用异步句柄来唤醒循环。
如果您只使用一个准备句柄,您可能会遇到这样一种情况,即循环因 i/o 而被阻塞,并且在完成轮询之前没有人会处理队列。异步句柄将“唤醒”循环,下次准备句柄运行时,您将处理队列。
关于c++ - libuv: uv_check_t 和 uv_prepare_t 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130724/
我一直在阅读 The libuv book ,但是关于检查和准备观察者的部分是不完整的,所以我找到的唯一信息是在 uv.h 中: /* * uv_prepare_t is a subclass of
我是一名优秀的程序员,十分优秀!