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