【发布时间】:2022-01-22 16:39:47
【问题描述】:
请告诉我,这是来自 Nick Mathewson 的book on Libevent 的参考第 3 节(“Running an event loop”)的引述:
默认情况下,event_base_loop() 函数运行 event_base 直到 没有更多的事件在其中注册。
老实说,我就是无法理解这句话。
什么意思 - “直到没有更多事件注册”。
循环如何知道没有更多新事件?事件之间可以有一个时间间隔 - 1 秒、1 小时......
Libevent 如何知道事件已经结束?
PS:我正在尝试将 event_base_loop () 函数的工作与 Windows 上的 GetQueuedCompletionStatus () 函数进行比较,但我不明白。因为 GetQueuedCompletionStatus 在无限循环中工作 - 无论是否有事件 - GetQueuedCompletionStatus 等待一个无限新的事件,如果没有则不会完成。
PS1:我很着急,没有完成“使用事件循环”一章。
它说你可以通过在第二个参数EVLOOP_NO_EXIT_ON_EMPTY中传递一个标志来重新定义event_base_loop()函数的行为。
这意味着该函数将无限期地等待新事件,或者直到我想通过 event_base_loopbreak / event_base_loopexit 手动退出 event_base_loop () 循环。
【问题讨论】:
-
像“......直到没有更多的当前事件......”一样阅读它
-
current wording 似乎是“默认情况下,此循环将运行事件库,直到没有更多未决或活动事件,或者直到调用 event_base_loopbreak() 或 event_base_loopexit()。你可以使用 'flags' 参数覆盖此行为。"
-
@某程序员老兄,但毕竟当我启动event_base_loop时,可能还没有事件。即使有 - 那么当所有当前事件结束时 - 在它们之后,例如,1分钟后,其他事件可能会出现吗?我就是想不通:(
-
Re "当我启动 event_base_loop 时,可能还没有事件。",没有事件意味着没有挂起或活动的事件,所以文档表明它会在那时返回.
-
@ikegami,我正在尝试将 event_base_loop () 函数的工作与 Windows 上的 GetQueuedCompletionStatus () 函数进行比较,但我不明白。因为 GetQueuedCompletionStatus 在无限循环中工作 - 无论是否有事件 - GetQueuedCompletionStatus 等待一个无限新的事件,如果没有则不会完成。