AMQP-CPP,libev > 从另一个线程停止 ev_loop
AMQP-CPP, libev > stop ev_loop from another thread
我将 AMQP-CPP 库与 libev
后端一起使用。我尝试创建一个 class ,它将打开一个连接并进行消费。我想 运行 工作线程中的连接循环,以免阻塞主线程。那部分代码看起来像这样
...
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 工作线程开始的循环。
我将 AMQP-CPP 库与 libev
后端一起使用。我尝试创建一个 class ,它将打开一个连接并进行消费。我想 运行 工作线程中的连接循环,以免阻塞主线程。那部分代码看起来像这样
...
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 工作线程开始的循环。