我正在實現一個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 + +? –