【发布时间】:2013-11-28 02:27:51
【问题描述】:
我使用 ZMQ 的总体目标是避免陷入异步消息传递的困境; ZMQ 似乎是一个可移植且实用的解决方案。然而,大多数 ZeroMQ 文档 like 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 构建的,所以那些 构造很好。
【问题讨论】:
-
您希望在哪个线程中调用这些事件回调?
标签: c++ event-handling zeromq