如何将ZeroMQ套接字集成到glib主循环中?

时间:2011-07-14 15:34:13

标签: c linux glib zeromq

我想在glib程序中添加一个ZeroMQ套接字。

可怜的是,zmq套接字不能poll() - 并且它们提供了实现,这会使旧的poll() func重载。我怎样才能有效地将它集成到主循环中?我尝试使用他们的民意调查(zmq_poll())而不是默认的民意调查,但除了使其成为global之外,没有办法给它zmq套接字。

定义新的GSource有效,但它可以获得高CPU使用率(通过设置timeout = 0)或任意轮询超时(例如,设置timeout = 100至少每100毫秒轮询一次)因为有可能进行民意调查,所以效率不高。

2 个答案:

答案 0 :(得分:1)

根据FAQ,您可以尝试“另一种方式”。而不是在 zmq套接字poll在常规套接字上尝试zmq_poll()

查看问题如何将ØMQ插槽与普通插座集成?或者在FAQ中使用GUI事件循环?

答案 1 :(得分:1)

我发现较新的zmq库支持 ZMQ_FD getsockopt()参数,这会为您提供一个unix fd 可以poll()。唯一需要注意的是,您不能poll()知道是否可以recv()send()来自它,但您需要使用 ZMQ_EVENTS } getsockopt()参数可以恢复真实的fd状态。

它似乎在glib中运作得很好。