event_base_loopbreak() 函数必须在事件循环所在的线程中被调用,假如在其他线程调用,可能出现死锁现象,一直卡在event_base_loopbreak不继续运行,解决方法可以用一个定时器如下:
void check_exitloop_cb(evutil_socket_t fd, short event, void *arg)
{
if (_is_start == false)
{
if (_ev_base)
{
int ret = event_base_loopbreak(_ev_base);
// ret = event_base_loopexit(_ev_base, nullptr);
}
}
}
void time_exitloop()
{
_ev_timer = event_new(_ev_base, -1, EV_PERSIST, check_exitloop_cb, this);
struct timeval tv = {1, 0};
evtimer_add(_ev_timer, &tv);
}