为什么gtk windows会挂起?

时间:2010-05-09 12:52:48

标签: c multithreading gtk

void forloop2()
{
    int i = 0;
    while(TRUE)
    {
        printf("forloop2\n");
    }
}

int main() {
    GtkWidget *window;
    g_thread_init(NULL);
    gdk_threads_init();
    g_thread_create((GThreadFunc)forloop2, NULL, FALSE, NULL);
    gtk_init(NULL, NULL);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show_all (window);
    gtk_main();
}

似乎创建的线程会影响gtk_window_new(我的程序在这里挂起),

我该怎么做呢?

更新

gdk_threads_enter/leave

修正

1 个答案:

答案 0 :(得分:1)

来自GDK文档:

  

您还必须使用gdk_threads_enter()/ gdk_threads_leave()对包围对GTK +的任何调用,而不是在信号处理程序中。

请参阅http://developer.gnome.org/gdk/stable/gdk-Threads.html#gdk-Threads.description