3

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

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

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

GTK 允许通过调用gtk_main()或以非阻塞方式使用gtk_main_iteration_do (FALSE).

Nanomsg 可以在阻塞或非阻塞模式下接收消息,也可以轮询消息

是否有可能以某种方式阻止,直到任何一个源首先输入可用的“解除阻止”?即有没有替代使用sleepwhich 仍然响应所有事件?

4

1 回答 1

3

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

这个答案中,我提供了一个示例,其中 100 个线程更新了相同的用户界面。

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

于 2015-05-18T18:13:39.993 回答