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

+0

@httpinterpret 그것은 당신이하고있는 일의 특성에 달려 있습니다; 당신은 일을 모순이없는 상태로 두지 않도록 조심해야합니다. GThreadPool, 또는 조건 변수는 당신이 찾고있는 것일 수 있습니다. 멀티 스레드를 시도 할 때 높은 수준의 세부 정보를 입력 할 수 있으므로 생각할 수 있습니다. – WhirlWind

+0

내 게시 된 데모는 정확하게 내가하는 일입니다. – httpinterpret

관련 문제