首页 > 解决方案 > 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));
    });

标签: c++networkingserverlibevent

解决方案


推荐阅读