gtk + win32线程

时间:2013-01-11 16:46:05

标签: c winapi gtk pthreads

来自http://developer.gnome.org/gdk/unstable/gdk-Threads.html

  

使用Win32后端,不应尝试从GDK调用   多个线程。

但是如何避免冻结界面呢?

例如,我有一个回调按钮,该按钮从主机获取虚拟机名称,并逐行将其添加到树列表视图中。我创建pthread来做它并添加行。

有时列表视图变得无效(某些单元格变为空白),之后所有应用程序的行为都相同(所有对话框等)

在WIN32中,多线程是不可能的,我可以做些什么来模拟它或避免这样的问题?

2 个答案:

答案 0 :(得分:1)

只是回答这个问题:

But how to avoid freezing of an interface?

独立于您用于UI的工具包,这是通过在与UI的不同线程中进行计算来实现的。然后使用消息更新UI以反映数据中的更改。永远不要从与创建窗口的线程不同的线程更新UI。

答案 1 :(得分:1)

最简单的方法是按照您的方式执行一个线程,并从那里添加您想要传递给GUI的全局容器。然后调用g_idle_add()来安排一个将读取此容器并更新GUI的函数;将从GUI线程调用空闲回调。

要注意两件事:

  1. 在程序初始化时调用g_thread_init()gdk_thread_init()以使glib线程安全。
  2. 使用互斥锁保护全局容器。