【发布时间】:2020-06-03 20:14:46
【问题描述】:
我正在将我现有的一些软件从 macOS 和 Windows 移植到 Linux。该软件的基础是在 GUI 后面运行的多线程服务器,可显示统计信息、生成特定事件的新窗口等。
在 macOS 上,我们有 DispatchQueue.main.sync。在 Windows / C# / WPF 上,我们有 Dispatcher.Invoke。我们专门在需要在更新 UI 线程时阻塞调用线程的情况下使用这些调用。 GTK+ 有类似的东西吗?
我一直使用gdk_thread_add_idle_full 来处理我不需要阻塞的代码的异步部分,但对于同步版本,它有点复杂。我当前的解决方案是一个包含 GMutex / GCond 对的简单对象。该对象在调用线程上是“可等待的”,在 UI 线程上是“可完成的”。将此对象传递给gdk_thread_add_idle_full 给了我想要的效果,但我很好奇是否有更简洁的选项。
服务器库是原样的,因此没有空间修改该代码以使其表现更好。我正在寻找工具包方面的解决方案。另外,GTK+ 的工作都是用 C 语言完成的。
【问题讨论】: