0
我正在測試libevent
的定時器功能。從計時器檢索基地?
我設定以下的計時器,它觸發計時器每3秒:
shared_ptr<event_base> base(event_base_new(), std::ptr_fun(event_base_free));
vector<shared_ptr<event> > std_events;
...
static const timeval three_sec = { 3, 0 };
event* tev = NULL;
tev = evtimer_new(base.get(), NULL, NULL);
rc = event_assign(tev, base.get(), -1, EV_PERSIST, timeout_cb, tev);
rc = event_add(tev, &three_sec);
shared_ptr<event> ptr(tev, std::ptr_fun(event_free));
std_events.push_back(ptr);
rc = event_base_dispatch(base.get());
在timeout_cb
,我希望它跑了幾次,然後退出派遣循環:
void
timeout_cb(evutil_socket_t fd, short events, void *arg)
{
static int count = 0;
int rc = 0;
event* timer = (event *)arg;
event_base* base = NULL;
if(count++ == 5) {
struct timeval delay = { 1, 0 };
rc = event_base_loopexit(base, &delay);
}
}
我試圖避免在回調中arg
的自定義結構。
event_base_loopexit
需要base_event
。是否有可能從evutil_socket_t
或event*
timer
獲得base_event
?