2010-05-09 2 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 창이 멈추는 이유는 무엇입니까?

는 어떻게 제대로 하는가, gtk_window_new (내 프로그램 자체가 여기에 달려)에 영향을 미치는 것 같다?

는 GDK 워드 프로세서에서 gdk_threads_enter/leave

+0

그것은 나를 위해 잘 작동 http://developer.gnome.org/gdk/stable/gdk-Threads.html#gdk-Threads.description를 참조하십시오. 나는 gtk_container_add (GTK_CONTAINER (window), gtk_entry_new());를 추가하여 윈도우가 제대로 동작하는지 테스트했다. – doublep

+0

'gdk_threads_enter/leave'가 없어도 작동한다는 것을 의미합니까? – httpinterpret

+0

그것이 멀티 스레딩 버그의 핵심입니다. 한 시스템에서 완벽하게 작동하고 다음 시스템에서 무서울 정도로 충돌 할 수 있습니다. – ptomato

답변

1

에 의해 고정 UPDATE :

또한 GTK에 대한 호출을 묶어야합니다는 + (A gdk_threads_enter과 시그널 핸들러 내에서 만들어지지)/gdk_threads_leave() 쌍.

+0

는이 답변을 참조하십시오, http://stackoverflow.com/questions/2793293/how-do-i-create-a-new-thread-to-make-pcap-loop-and-gtk-main-compatible/2793644# 2793644 – hlovdal

관련 문제