我该如何编写一个主循环,以阻塞等待来自多个来源的消息?据我所知,编写事件处理循环的首选方式是在等待事件时进行阻塞。
然而,当消息可能来自多个来源时,如何正确处理阻塞?
我想编写一个响应用户输入事件和通过nanomsg发送的消息的GTK GUI。
GTK允许通过调用
然而,当消息可能来自多个来源时,如何正确处理阻塞?
我想编写一个响应用户输入事件和通过nanomsg发送的消息的GTK GUI。
GTK允许通过调用
gtk_main()
或以非阻塞方式gtk_main_iteration_do(FALSE)
来处理其事件。
Nanomsg可以以阻塞或非阻塞模式接收消息,也可以轮询消息。
是否可能在任何一个输入源有可用输入时“阻塞”,直到“解除阻塞”?即,是否有一种替代使用sleep
仍对所有事件保持响应的方法?
g_add_idle()
或gdk_threads_add_idle()
(其中之一;我忘记哪个更好了)在 UI 线程上安排您的 UI 更新。 - andlabsidle_add()
函数会在没有待处理的输入事件时安排要运行的函数;您可以使用它来响应通过nanomsg接收到的消息更新UI(但不要在此处实际执行消息处理,否则会发生您所说的情况)。 - andlabs