我的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));
但是,我发现此计时器事件未运行。如果我将kFlag
从EVLOOP_ONCE
更改为0,则表示运行良好。我错过了什么?
答案 0 :(得分:0)
罪魁祸首在事件基础循环中。正确的代码是这样的:
while ((res = event_base_loop(ebase, EVLOOP_ONCE)) >= 0) {
if (start_cancel)
break;
}
即。它应该继续滚动,返回值不小于0而不仅仅是1.