AMQP-CPP,libev >停止ev_loop来自另一个线程

AMQP-CPP, libev > stop ev_loop from another thread

本文关键字:loop 线程 另一个 ev 停止 libev gt AMQP-CPP      更新时间:2023-10-16

我将AMQP-CPP lib与后端一起使用libev。我尝试创建一个类,该类将打开连接并进行消费。我想在工作线程中运行连接的循环,以免阻塞主线程。那部分代码如下所示

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

然后在某个时候我想停止循环。我已经读到可以使用ev_break()功能来做到这一点。但是,它应该从调用ev_run()相同的线程调用。更多的搜索显示ev_async_send()函数可能会做到这一点,但我无法弄清楚如何做到这一点。

我该怎么做?有什么想法吗?

下面是一个示例:

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工作线程启动的循环。