gpt4 book ai didi

c++ - 是否有机会在不知道拥有队列的情况下触发 kevent?任何替代品?

转载 作者:行者123 更新时间:2023-11-28 04:17:29 28 4
gpt4 key购买 nike

我需要设计一个“等待事件对象”的东西,它可以接受不透明的事件对象并能够阻塞,直到其中一个事件被发出信号。它应该适用于 MacOS/Linux/Windows。所以对于 Linux/Windows 来说一切都很好:

  1. 在 Windows 上,我可以将来自 CreateEvent 的 native 事件包装在我的伪类和执行等待调用 WaitForMultipleObjects 的类中。
  2. 在 Linux 上,我可以将 eventfd()poll()/epoll() 混合使用并实现相同的效果。
  3. 在 MacOS 上,我可以将 kqueuekeventEVFILT_USER 一起使用,但问题是我无法在不知道队列的情况下触发事件/已将事件添加到队列中,这在 Windows/Linux 上不是问题,我可以在其中设置事件或写入描述符。

我的问题是,是否有可能我遗漏了一些东西,我实际上可以使用 kevent 并以某种方式触发它,以便稍后添加到队列时它会发出信号?我不是在谈论编写用户空间代码,让我们知道一个事件已经在没有队列的情况下设置,然后只是在添加到队列时发出信号,我知道我可以做到,但我非常想如果有的话,使用 OS 内核原语。当然,这是手册页的摘录:

EVFILT_USER Establishes a user event identified by ident which is not associated with any kernel mechanism but is triggered by user level code.

有点清除所有希望。然后是一个后续问题 - 是否有任何其他 MacOS 内核机制的行为类似于事件和 eventfd()

最佳答案

您可以像在 Linux 上使用 eventfd() 一样使用管道。

您还可以使用 Mach 端口和 EVFILT_MACHPORT

关于c++ - 是否有机会在不知道拥有队列的情况下触发 kevent?任何替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293186/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com