AMQP-CPP, libev & gt; остановить ev_loop из другого потока

я использую AMQP-CPP возиться с libev бэкенд. Я пытаюсь создать класс, который откроет соединение и будет потреблять. Я хочу запустить цикл соединения в рабочем потоке, чтобы не блокировать основной поток. Эта часть кода выглядит следующим образом

...
m_thread.reset(new std:thread([this]()
{
ev_run(m_loop, 0);
}));
...

Затем в какой-то момент я хочу остановить цикл. Я прочитал, что это можно сделать с ev_break() функция. Однако он должен вызываться из того же потока, что и ev_run() назывался. Больше поиска показало, что ev_async_send() функция может сделать это, но я не могу понять, как.

Как мне это сделать? Есть идеи?

0

Решение

Вот пример:

void asyncCallback(EV_P_ ev_async*, int)
{
ev_break(m_loop, EVBREAK_ONE);
}

void MyClass::stopLoop()
{
ev_async_init(&m_asyncWatcher, asyncCallback);
ev_async_start(m_loop, &m_asyncWatcher);
ev_async_send(m_loop, &m_asyncWatcher);

m_thread->join();
}

// in the class async watcher should be defined
ev_async m_asyncWatcher;

По телефону stopLoop() Функция из другого потока останавливает цикл, запущенный из рабочего потока m_thread.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]