[英]using kqueue for EVFILT_USER
我很难理解如何将kqueue用于用户空间事件。
我寻找2个用例。
用例1:手动重置事件
用例2:自动重置事件
我想我了解如何使用kqueue()和kevent(),但是我不清楚传递给kevent()的事件如何查找相关操作:
假设有一个名为“ event”的结构kevent变量。
让我们假设,我们没有问题找到一个新的事件ID,该事件ID与该kqueue实例的其他事件ID不冲突,名为“ eventId”。
看到了吗? 在上面的EV_SET()调用中查看我需要帮助的地方。
对于用例1(手动重置事件),与用例2(自动重置事件)相比,操作(1)创建看上去可能有所不同。
操作(3)和(4)我完全处于黑暗中。 这些可能需要EV_ENABLE / EV_DISABLE吗? EV_CLEAR安装在哪里?
到目前为止,我认为除了“调度”之外,我不需要执行任何操作(6)。 我非常肯定,操作(5)可以像我上面给出的那样工作。
我现在花了一天的时间来尝试查找说明如何完成工作的文档或样本。 我在苹果代码库中找到了一个kqueue测试程序,但我对此表示怀疑。 同样,它在测试中仅发送1个事件,并且该事件终止接收线程的循环。 因此,这无助于我了解2个用例的详细信息。
我打算现在在x86机器上的FreeBsd 9.1下使用它。
经过一些试验,我发现:
测试就像一个魅力。 在我的测试中,我做了NOTE_FFCOPY事情,但我认为没有必要。
用户事件具有2种状态-发出信号,未发出信号。 EV_ENABLE和EV_DISABLE设置这些状态。
测试证明,信号状态的事件实际上是由kevent()重复报告的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.