2010-05-09 64 views
1
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(我PROGRAME挂在这里),为什么gtk窗口挂起?

我怎么做是正确的?

UPDATE

固定由gdk_threads_enter/leave

+0

它工作正常的我。我添加了gtk_container_add(GTK_CONTAINER(window),gtk_entry_new());'在那里测试窗口的工作原理,它的确如此。 – doublep 2010-05-09 12:57:53

+0

你的意思是没有'gdk_threads_enter/leave',真的吗? – httpinterpret 2010-05-09 14:45:51

+0

这是多线程错误的关键;他们可以在一个系统上完美地工作,并且在下一个系统上可怕地崩溃。 – ptomato 2010-05-09 21:28:31

回答