gtk应用程序中,所有执行都在gtk_main函数内部进行。其他图形框架作品具有类似的事件循环,例如QTapp.execClutterclutter_main。但是ZeroMQ是基于这样的假设,即插入了while (1) ...循环(例如,请参见here)。

您如何结合这两种执行策略?

我目前想在用C编写的困惑应用程序中使用zeromq,因此我当然希望得到直接的答案,但也请为其他变体添加答案。

最佳答案

听起来ZeroMQ代码只想简单地重复执行一次即可。最简单的方法是将ZeroMQ代码放入空闲函数或超时函数中,并使用该函数的非阻塞版本(如果存在)。

对于Clutter,您可以使用 clutter_threads_add_idle() clutter_threads_add_timeout() 。对于GTK,您可以使用 g_idle_add() g_timeout_add()

更为困难但可能更好的方法是使用 g_thread_create() 为ZeroMQ代码创建一个单独的线程,并按照他们的建议使用带有阻塞函数的while(1)构造。如果这样做,则还必须找到线程相互通信的某种方式-GLib的互斥体和异步队列通常可以正常工作。

关于gtk - 如何在GTK/QT/Clutter应用程序中使用ZeroMQ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6452131/

10-14 18:56
查看更多