我使用 ZMQ 的总体目标是避免陷入异步消息传递的麻烦;ZMQ 似乎是一个可移植且实用的解决方案。然而,大多数 ZeroMQ 文档,例如 this,以及我在 Google 上搜索过的许多其他 zmq 示例都是基于helloworld.c格式的。也就是里面都是简单的程序代码int main(){}
。
我的问题是我想在类 c++ 单例类中“嵌入”一个 zmq“监听器”。我想“收听”消息然后处理它们。我打算在重要的情况下使用 zmq 的PUSH
->PULL
套接字。我不知道该怎么做是在内部“事件循环”中。
class foomgr {
public:
static foomgr& get_foomgr();
// ...
private:
foomgr();
foomgr(const &foomgr);
// ...
listener_() {
// EVENT LOOP HERE
// RECV and PROCESS ZMQ MSGS
// while(true) DOES NOT WORK HERE
}
// ...
zmq::context_t zmqcntx_;
zmq::socket_t zmqsock_;
const int zmqsock_linger_ = 1000;
// ....
}
我显然不能while(true)
在侦听器中使用该构造,因为无论我从哪里调用它都会阻塞。由于使用 ZMQ 的优点之一是我不必自己管理“侦听器”线程,因此必须弄清楚如何创建自己的线程来包装 listener_ 似乎很愚蠢。我迷失了解决方案。
注意:我是一个 c++ 新手,所以对大多数人来说可能很明显的事情对我来说不是。此外,我正在尝试使用通用“单词”,而不是库或特定语言以避免混淆。代码是用 -std=c++11 构建的,所以这些结构很好。