在具有相同超时的相同文件描述符上重复调用event_add

时间:2013-09-01 18:14:58

标签: libevent

如果我执行以下操作

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

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

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

1 个答案:

答案 0 :(得分:0)

引用official documentation (Making events pending and non-pending section)

  

如果您在待处理的事件上致电event_add(),则会将其保留为待处理状态,并使用提供的超时重新安排它。

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


然而,在未提出建议的情况下延伸答案时,请注意以下部分:

  

如果该事件已处于待处理状态,并且您使用超时NULL重新添加该事件,则event_add()将无效。

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

  1. 直接使用event_add()将非NULL超时设置为{0, 0}
  2. 使用event_del() / event_add()删除/添加事件,此次设置NULL超时
  3. 我会推荐后者。