Такая проблема:
У меня есть основное окно (main_window). При нажатии в нем на кнопку вызывается новый поток. В свою очередь в какой-то момент (например глабальная переменная становится True) в этом потоке создается новое окно (win2). Так вот, когда это окно содалось оно не обновляется и ни на что не реагирует. И при завершеении потока это окно (win2) уничножается. А мне надо чтобы оно оставалось до тех пор пока я его сам не уничтожу.
Как мне это сделать?
Вот пример программы реазизующей это:
<pre>
#include "stdio.h"
#include "gtk/gtk.h"
#include "windows.h"
void * thread_func(void * data) {
// Создаем новое окно (в потоке)
GtkWidget * win2 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget * lab2 = gtk_label_new("Label");
GtkWidget * btn2 = gtk_button_new_with_label("Button");
GtkWidget * vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), lab2, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), btn2, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(win2), vbox);
gtk_window_present (win2);
gtk_widget_show_all(win2);
// Делаем цикл, чтобы еще задержаться в потоке
int i;
for (i = 0; i < 10; i++) {
printf(" %d thread helloo\n", i);
Sleep(500);
}
}
void btn1_click() {
DWORD tid;
printf("ctreaed new thread\n\n");
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_func, (LPVOID)NULL, 0, &tid);
}
int main(int argc, char **argv)
{
GtkWidget *main_window;
GtkWidget *btn1;
GtkWidget *lab1;
g_thread_init(NULL);
gdk_threads_init();
gtk_init(&argc, &argv);
// Создаем главное окно
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(main_window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
btn1 = gtk_button_new_with_label("Create window in new thread");
// При нажатии на кнопку запускается новые поток
g_signal_connect(G_OBJECT(btn1), "clicked",
G_CALLBACK(btn1_click), NULL);
gtk_container_add(GTK_CONTAINER(main_window), btn1);
gtk_widget_show_all(main_window);
gdk_threads_enter();
gtk_main();
gdk_threads_leave();
return 0;
}
</pre>
Похожие темы
- Форум Xubuntu 21.10. Почему кнопка на gtk форме не работает? (2021)
- Форум Пример из документации к GTK+ (2004)
- Форум GTK. Закрыть окно GTK_WINDOW (2010)
- Форум Показ текста при нажатии на кнопку GTK+, c (2017)
- Форум GTK потоки и вообще (2012)
- Форум вопрос по программированию gtk+ (2003)
- Форум Как сделать меню 3-его уровня используя библиотеку Gtk+ (2014)
- Форум GtkNotebook, переключение между страницами (2010)
- Форум Меню переполнения в gtk (2013)
- Форум gtk обработка can_activate_accel (2006)