1

如果我执行以下操作

  1. 为特定文件描述符 fd1 调用 event_add 并且超时 t1 = 5 秒
  2. 1 秒后,不等待任何事件发生,我再次调用 event_add 为 f1 和 t1 = 5 秒。

event_add 的第二次调用会取消之前的调用吗?即如果事件没有发生,超时现在会发生在 6 秒而不是 5 秒吗?或者,我们会有 2 次超时 - 一个在 5 秒,另一个在 6 秒

libevent 版本 1 和 2 之间的这种行为是否不同?我没有找到任何与此相关的文档。我无法理解这是通过阅读代码。我显然可以编写一个程序来测试这一点,但由于该程序必须在不同的平台上运行,如果有一个描述这些条件下行为的具体文档会更好。

4

1 回答 1

1

引用官方文档(使事件挂起和非挂起部分)

如果您调用一个已经event_add()挂起的事件,它将使其处于挂起状态,并使用提供的超时重新安排它。

因此,您可以预期事件会在 6 秒后触发超时。当然,在两次调用之间的事件结构上发生的任何事件(例如,如果与文件描述符相关联)event_add()也将重置计时器。


但是,用一条不问的建议来扩展答案,请注意以下部分:

如果事件已经挂起,并且您使用 timeout 重新添加它NULLevent_add()则将无效。

因此,如果您想删除现有事件的超时,您可以选择:

  1. 直接使用event_add()NULL超时设置为{0, 0}
  2. event_del()使用/删除/添加事件,这次event_add()设置了NULL超时

我会推荐后者。

于 2014-09-03T08:31:56.250 回答