我想在glib程序中添加一个ZeroMQ套接字。
可怜的是,zmq套接字不能poll()
- 并且它们提供了实现,这会使旧的poll()
func重载。我怎样才能有效地将它集成到主循环中?我尝试使用他们的民意调查(zmq_poll()
)而不是默认的民意调查,但除了使其成为global
之外,没有办法给它zmq套接字。
定义新的GSource
有效,但它可以获得高CPU使用率(通过设置timeout = 0
)或任意轮询超时(例如,设置timeout = 100
至少每100毫秒轮询一次)因为有可能进行民意调查,所以效率不高。
答案 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中运作得很好。