使用event_base_loop添加计时器事件

时间:2015-10-22 16:20:09

标签: linux libevent

我的ebase线程执行以下循环     constexpr int kFlag = EVLOOP_ONCE;     while((res = event_base_loop(ebase_,kFlag))== 1){       让();     }

和另一个(主)线程添加周期性计时器事件。它在 ebase线程调用event_base_loop之后添加事件

event* ev = event_new(base(), -1, EV_PERSIST | EV_TIMEOUT, &PeriodicCb, data);
CHECK(0 == event_add(ev, &tv));

但是,我发现此计时器事件未运行。如果我将kFlagEVLOOP_ONCE更改为0,则表示运行良好。我错过了什么?

1 个答案:

答案 0 :(得分:0)

罪魁祸首在事件基础循环中。正确的代码是这样的:

while ((res = event_base_loop(ebase, EVLOOP_ONCE)) >= 0) {
  if (start_cancel)
    break;
}

即。它应该继续滚动,返回值不小于0而不仅仅是1.