我正在实现一个GUI应用程序,它使用基于zeroMQ(OpenBTS物理状态API)的通知系统。 我明白我必须把zeroMQ接收器放在一个单独的线程中,以不阻塞接口,但我不知道要实现什么类型的线程方法。 在此先感谢!C++多线程与zeroMQ
编辑:用于接收器的zeroMQ代码,是
zmq::context_t context(4);
zmq::socket_t targetPublisher(context, ZMQ_SUB);
std::string localopenbts = "tcp://127.0.0.1:45160";
targetPublisher.setsockopt(ZMQ_SUBSCRIBE, "", 0);
targetPublisher.connect(localopenbts.c_str());
while (1) {
try {
zmq::message_t event;
targetPublisher.recv(&event);
std::cout << std::string(static_cast<char*>(event.data()), event.size()) << std::endl;
} catch(const zmq::error_t& e) {
std::cout << "!! exception !!" << std::endl;
}
}
为了不遮挡GUI,我理解的是,我需要运行在独立的线程的无端环。但我不知道如何正确实施。
再次感谢您。
请分享一些代码,否则我们无法帮到你,谢谢 –
由于问题不确定,我认为这更多的是设计/体系结构问题,而不是一个特定的多线程问题。通信线程将在收到消息时与UI线程进行通信。你打算怎么做? UI框架通常不是线程安全的,所以你需要某种形式的上下文切换,例如,通过事件循环或Command模式。另一种选择是不同的设计,例如基于反应器的集成消息和UI。 – Jens
对于问题风格感到遗憾,这里仍然是新的。我以前在c#中利用await-async构造做了类似的事情。更具体的是有什么类似的C + +? –