我很难理解如何将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()重复报告的。
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |