2010-05-09 94 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

回答