如何编写一个主循环,该循环在等待来自多个来源的消息时阻止?据我了解,编写事件处理循环的首选方法是在等待事件时阻止它。
但是,当消息可能来自多个来源时如何正确处理?
我想编写一个GTK GUI,该GUI对用户输入事件以及通过Nanomsg发送的消息做出了响应。
gtk允许通过调用gtk_main()
或以gtk_main_iteration_do (FALSE)
的方式来处理其事件。
Nanomsg可以在阻塞或非阻塞模式下接收消息,以及有关消息的民意调查。
是否有可能以某种方式阻止,直到任何源首先具有输入" Unblocks"的输入?IE。是否有使用sleep
的替代方案,它仍然对所有事件响应?
您可以在GTK 应用程序中拥有尽可能多的线程(并且您不会被迫使用GMainLoop
实例),只要任何修改UI的调用都会发生在主GTK LOOP中。
在此答案中,我提供了一个示例,其中有100个线程更新相同的用户界面。
最后,您可以分叉并使用您在自己的线程中更熟悉的任何内容(是轮询,阻止或其他任何内容),并且只有在需要通知时要小心(即修改UI)。