Libevent:如何使用event_base_dispatch()在另一个线程中

时间:2018-11-12 16:49:38

标签: c++ networking server libevent

它在主线程中工作,但在另一个线程中返回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));
    });

0 个答案:

没有答案