2010-05-09 218 views
2
void forloop2() 
{ 
    int i = 0; 
    while(TRUE) 
    { 
     printf("forloop2\n"); 
    } 
} 

int main() { 
    GThread   *Thread1; 
    GtkWidget *window; 
    g_thread_init(NULL); 
    gdk_threads_init(); 
    gdk_threads_enter(); 
    Thread1 = g_thread_create((GThreadFunc)forloop2, NULL, TRUE, NULL); 
    gtk_init(NULL, NULL); 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_widget_show_all (window); 
    gtk_main(); 
    g_thread_join(Thread1); 
    gdk_threads_leave(); 
} 

當我關閉窗口時,如何讓Thread1也退出?當主線程退出時,如何讓子線程退出?

回答

1

清除forloop2()循環檢查每次迭代的主要條件。當你想退出main時,設置該條件,然後在Thread1上調用g_thread_join()。由於forloop2()檢查它何時看到該條件,它將退出,導致它加入,main將繼續退出。

+0

當主線程退出時,是否可以創建一些會自動退出的守護線程? – httpinterpret 2010-05-09 13:35:36

+0

@httpinterpret它取決於你在做什麼的細節;你必須非常小心,不要讓事情處於不一致的狀態。 GThreadPool或條件變量可能是你正在尋找的。您可能希望對您想要多線程的內容進行一些高級細節,所以我們可以考慮一下。 – WhirlWind 2010-05-09 13:46:06

+0

我發佈的演示正是我正在做的。 – httpinterpret 2010-05-09 13:53:33