在gtk应用程序中,所有执行都在gtk_main
函数内部进行。其他图形框架作品具有类似的事件循环,例如QT的app.exec
和Clutter的clutter_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/