2010-05-09 3 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, установите это условие, а затем вызовите g_thread_join() в Thread1. Поскольку forloop2() проверяет, когда он видит это условие, он выйдет, заставив его присоединиться, и main продолжит свою работу.

+0

Возможно ли сделать некоторые виды потоков демона, которые автоматически выйдут при выходе основного потока? – httpinterpret

+0

@httpinterpret это зависит от особенностей того, что вы делаете; вы должны быть очень осторожны, чтобы не оставлять вещи в противоречивом состоянии. GThreadPool или переменные условия могут быть тем, что вы ищете. Возможно, вы захотите немного подробно рассказать о том, что вы пытаетесь использовать многопоточность, поэтому мы можем подумать об этом. – WhirlWind

+0

Моя опубликованная демо - это именно то, что я делаю. – httpinterpret

Смежные вопросы