使用 event_base_loop 添加计时器事件
adding timer events with event_base_loop
我的 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,它会很好地 运行。我错过了什么?
罪魁祸首在事件基础循环中。正确的代码是这样的:
while ((res = event_base_loop(ebase, EVLOOP_ONCE)) >= 0) {
if (start_cancel)
break;
}
即它应该继续滚动 return 值不小于 0 而不仅仅是 1.
我的 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,它会很好地 运行。我错过了什么?
罪魁祸首在事件基础循环中。正确的代码是这样的:
while ((res = event_base_loop(ebase, EVLOOP_ONCE)) >= 0) {
if (start_cancel)
break;
}
即它应该继续滚动 return 值不小于 0 而不仅仅是 1.