Libevent: как использовать event_base_dispatch () в другом потоке - PullRequest
0 голосов
/ 12 ноября 2018

он работает в основном потоке, но в другом потоке он возвращает 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));
    });
...