如果我执行以下操作
第二次调用event_add会取消先前的调用吗?即如果事件没有发生,超时现在会在6秒而不是5秒发生吗?或者,我们会有2次超时 - 一次是5次,另一次是6次
libevent版本1和2之间的这种行为是否有所不同?我没有找到任何与此有关的文件。我无法理解这是通过阅读代码。我显然可以编写一个程序来测试它,但由于程序必须在不同的平台上工作,如果有一个具体的文档来描述这些条件下的行为会更好。
答案 0 :(得分:0)
引用official documentation (Making events pending and non-pending section):
如果您在已待处理的事件上致电
event_add()
,则会将其保留为待处理状态,并使用提供的超时重新安排它。
因此您可以预期在6秒后触发超时事件。当然,对event_add()
的两次调用之间在事件结构上发生的任何事件(例如,如果与文件描述符相关联)也会重置计时器。
然而,在未提出建议的情况下延伸答案时,请注意以下部分:
如果该事件已处于待处理状态,并且您使用超时
NULL
重新添加该事件,则event_add()
将无效。
因此,如果要删除现有事件的超时,可以选择:
event_add()
将非NULL
超时设置为{0, 0}
event_del()
/ event_add()
删除/添加事件,此次设置NULL
超时我会推荐后者。