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

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

pitty是,一个zmq套接字不是poll() ,它们给它们的实现,它重载了旧的poll() func。 我怎么能有效地将它整合到主循环? 我尝试使用他们的投票( zmq_poll() ),而不是默认的,但没有好办法给它的zmq套接字,除了使其成为一个global

定义一个新的GSource工作,但它可以获得高CPU使用率(通过设置timeout = 0 )或任意轮询超时(例如设置timeout = 100轮询至less每100毫秒),这是不是真的有效,因为有投票的可能性。

根据常见问题,你可以尝试“另一种方式”的方法。 不要在zmq套接字上进行poll ,而是在常规套接字上尝试zmq_poll()

退房问题如何将ØMQ插座与普通插座进行整合? 或者与一个GUI事件循环? 在FAQ中。

我发现较新的zmq库支持ZMQ_FD getsockopt()参数,它返回一个您可以poll()的unix fd 。 唯一需要注意的是你不能poll()它来知道你是否可以recv()send()send()它,但是你需要使用ZMQ_EVENTS getsockopt()参数来取回真正的fd状态。

这个似乎在glib中工作得很好。