如何在等待来自多个源的消息时编写一个阻塞的主循环? As I understand it,编写事件处理循环的首选方法是让它在等待事件时阻塞。
但是,当消息来自多个来源时,如何正确处理阻止?
我想编写一个GTK GUI,它响应用户输入事件和通过nanomsg发送的消息。
GTK允许通过调用gtk_main()
或以非阻止方式使用gtk_main_iteration_do (FALSE)
来处理其事件。
Nanomsg可以receive a message处于阻止或非阻止模式,以及poll for messages。
是否有可能以某种方式阻止,直到任何一个源首先输入“unblocks”为止?即是否可以使用sleep
来替代所有事件?
答案 0 :(得分:3)
您可以在GTK +应用程序中拥有任意数量的线程(并且您不必使用GMainLoop
实例),前提是修改UI的任何调用都发生在主GTK +循环中。
在this answer中,我提供了100个线程更新同一用户界面的示例。
最后,您可以在自己的线程中分叉并使用您熟悉的任何内容(无论是轮询,阻止还是其他),并且只有在需要通知(即修改UI)时才要小心。