使用的库是msys2的i686的gtk3.24.34或者3.24.35,如果线程中只创建一个window,窗口关闭,线程正常退出;如果创建一个带button的窗口,窗口关闭,线程退出过程中进程崩溃。Linux下没有这个问题,win32_gtk3.6.4也没有这个问题。
代码如下:
#include<gtk/gtk.h>
void on_w_destroy(){
gtk_main_quit();
}
gpointer func(gpointer data){
gtk_init(NULL,NULL);
GtkWidget* w;
GtkWidget* button; w=gtk_window_new(GTK_WINDOW_TOPLEVEL); button=gtk_button_new_with_label("button"); gtk_container_add(GTK_WINDOW(w),button); g_signal_connect(w,"destroy",on_w_destroy,NULL);
gtk_widget_show_all(w);//崩溃
/*gtk_widget_show(w);如果只显示window不显示button,关闭窗口,线程正常退出,进程不会崩溃*/
gtk_main();
return 0;
}
int main(){
GThread * th = g_thread_new("myth",(GThreadFunc)func,NULL); g_thread_join(th);
g_print("thread exit normal");
return 0;
}
代码如下:
#include<gtk/gtk.h>
void on_w_destroy(){
gtk_main_quit();
}
gpointer func(gpointer data){
gtk_init(NULL,NULL);
GtkWidget* w;
GtkWidget* button; w=gtk_window_new(GTK_WINDOW_TOPLEVEL); button=gtk_button_new_with_label("button"); gtk_container_add(GTK_WINDOW(w),button); g_signal_connect(w,"destroy",on_w_destroy,NULL);
gtk_widget_show_all(w);//崩溃
/*gtk_widget_show(w);如果只显示window不显示button,关闭窗口,线程正常退出,进程不会崩溃*/
gtk_main();
return 0;
}
int main(){
GThread * th = g_thread_new("myth",(GThreadFunc)func,NULL); g_thread_join(th);
g_print("thread exit normal");
return 0;
}