来自http://developer.gnome.org/gdk/unstable/gdk-Threads.html
使用Win32后端,不应尝试从GDK调用 多个线程。
但是如何避免冻结界面呢?
例如,我有一个回调按钮,该按钮从主机获取虚拟机名称,并逐行将其添加到树列表视图中。我创建pthread来做它并添加行。
有时列表视图变得无效(某些单元格变为空白),之后所有应用程序的行为都相同(所有对话框等)
在WIN32中,多线程是不可能的,我可以做些什么来模拟它或避免这样的问题?
答案 0 :(得分:1)
只是回答这个问题:
But how to avoid freezing of an interface?
独立于您用于UI的工具包,这是通过在与UI的不同线程中进行计算来实现的。然后使用消息更新UI以反映数据中的更改。永远不要从与创建窗口的线程不同的线程更新UI。
答案 1 :(得分:1)
最简单的方法是按照您的方式执行一个线程,并从那里添加您想要传递给GUI的全局容器。然后调用g_idle_add()
来安排一个将读取此容器并更新GUI的函数;将从GUI线程调用空闲回调。
要注意两件事:
g_thread_init()
或gdk_thread_init()
以使glib线程安全。