我很难理解,如何将kqueue用于用户空间事件。
我寻找两个用例。
用例1:手动重置事件
用例2:自动重置事件
我想我理解如何使用kqueue()和kevent(),但是我不清楚如何将事件传递给kevent()来查找相关的操作:
让有一个名为"event“的struct变量。
让我们假设,我们没有问题找到一个新的事件id,它不会与那个名为"eventId“的kqueue实例的其他事件id发生冲突。
看到了吗?在上面的EV_SET()调用中,查看我需要帮助的位置。
对于用例1(手动重置事件),创建操作(1)可能与用例2(自动重置事件)不同。
操作(3)和(4)我完全处于黑暗中。我可能需要EV_ENABLE/EV_ those吗?EV_CLEAR在哪里合适?
到目前为止,我认为除了“调度”之外,我不需要在操作(6)中做任何事情。我很积极,那个手术(5)可以像我上面说的那样起作用。
现在,我花了更多的时间试图找到文档或示例来展示它是如何完成的。我在苹果代码库( apple codebase )中发现了一个kqueue测试程序,但我怀疑它是否正确。此外,它在测试中只发送一个事件,该事件终止接收线程的循环。因此,这并不能帮助我理解我的两个用例的细节。
我现在计划在FreeBsd 9.1下在x86 machine...for上使用它。
发布于 2013-04-18 10:18:20
经过一些实验,我发现:
考试很有魅力。在我的测试中,我做了NOTE_FFCOPY的事情,但我不认为它是必要的。
用户事件有两个状态-信号,而不是信号。EV_ENABLE和EV_DISABLE似乎设置了这些状态。
测试验证了,处于信号状态的事件实际上是由kevent()反复报告的。
https://stackoverflow.com/questions/16072395
复制相似问题