c++ - libevent:如何在另一个线程中使用event_base_dispatch()
问题描述
它在主线程中工作,但在另一个线程中返回 1,添加我还测试添加一个 timerevent,但它也不起作用(在添加 timerevent event_base_dispatch 工作但无法调用 listenCallback 之后)。我的代码:
// test code
// struct event *ev;
// struct timeval tv;
// tv.tv_sec = 1000;
// tv.tv_usec = 0;
// ev = evtimer_new(m_pEventBase.get(),[](evutil_socket_t,short,void *pUserData){
// }, this);
// evtimer_add(ev, &tv);
auto pListener = std::shared_ptr<evconnlistener>(evconnlistener_new_bind(
m_pEventBase.get(),
&listenCallback,
this,
LEV_OPT_CLOSE_ON_FREE | LEV_OPT_THREADSAFE,
-1,
(sockaddr *)&stAddr,
sizeof(sockaddr_in)),
[](evconnlistener *pListener) { evconnlistener_free(pListener); });
m_pThread = std::make_shared<std::thread>([this]() {
int nCode = event_base_dispatch(m_pEventBase.get());
onLog("loop end:" + std::to_string(nCode));
});
解决方案
推荐阅读
- python - 使用请求模块模拟 HTTP 发布请求不起作用
- php - for 循环对于读取 POST 请求来说太快了?PHP - 数组
- amazon-web-services - AWS API Gateway 令牌测试响应代码:401
- css - 如何使用 CSS 创建倾斜的进度条?
- python - django 管理页面自定义
- wordpress - 如何在 localhost 中使用 xampp 在 wordpress 上进行协作
- mysql - 使用 Where 条件和旧的更新触发器。数据
- octave - 八度 - 未定义
- javascript - 来自 bootstrap4 的 Tempus dominus
- html - 初始 CSS 过渡不会播放