适用于GTK和nanomsg的线程友好主循环

时间:2015-05-13 19:20:31

标签: multithreading user-interface event-handling gtk nanomsg

如何在等待来自多个源的消息时编写一个阻塞的主循环? As I understand it,编写事件处理循环的首选方法是让它在等待事件时阻塞。

但是,当消息来自多个来源时,如何正确处理阻止?

我想编写一个GTK GUI,它响应用户输入事件和通过nanomsg发送的消息。

GTK允许通过调用gtk_main()或以非阻止方式使用gtk_main_iteration_do (FALSE)来处理其事件。

Nanomsg可以receive a message处于阻止或非阻止模式,以及poll for messages

是否有可能以某种方式阻止,直到任何一个源首先输入“unblocks”为止?即是否可以使用sleep来替代所有事件?

1 个答案:

答案 0 :(得分:3)

您可以在GTK +应用程序中拥有任意数量的线程(并且您不必使用GMainLoop实例),前提是修改UI的任何调用都发生在主GTK +循环中。

this answer中,我提供了100个线程更新同一用户界面的示例。

最后,您可以在自己的线程中分叉并使用您熟悉的任何内容(无论是轮询,阻止还是其他),并且只有在需要通知(即修改UI)时才要小心。