2012-05-31 3 views
2

В следующей программе GTK:в GTK под Windows 7 в gtk_widget_queue_draw

#include <gtk/gtk.h> 
GtkVBox *vbox; 
GtkWindow *win; 
gboolean Timer (gpointer user_data) 
{ 
    gtk_widget_queue_draw (GTK_WIDGET (vbox)); 
    return 1; 
} 
int main(int argc, char **argv) 
{ 
    gtk_init(&argc, &argv); 
    win = (GtkWindow*)gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    vbox = (GtkVBox*)gtk_vbox_new(TRUE, 1); 
    gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(vbox)); 
    g_timeout_add (200, Timer, 0); 
    gtk_widget_show_all(GTK_WIDGET(win)); 
    gtk_main(); 
    return 0; 
} 

Утечка под Windows 7 64-разрядная при компиляции с помощью GCC 4.5.2 в качестве менеджера задач шоу. Он не течет при компиляции под Windows XP 32-бит. Программа ничего не делает. Он создает окно, помещает в него поле, а затем вызывает gtk_widget_queue_draw с таймера каждые 200 мс.

Вот пакетный файл для компиляции и связывания теста. Переменная GTK устанавливается в каталог, содержащий двоичное распределение GTK. Например. 2.24.10 в этом случае.

set GTK=c:/temp/GTK 
gcc -c -mms-bitfields -I%gtk%/lib/gtk-2.0/include -I%gtk%/lib/gdk-2.0/include -I%gtk%/lib/glib-2.0/include -I%gtk%/include -I%gtk%/include/atk-1.0 -I%gtk%/include/gdk-pixbuf-2.0 -I%gtk%/include/cairo -I%gtk%/include/pango-1.0 -I%gtk%/include/gio-win32-2.0 -I%gtk%/include/glib-2.0 -I%gtk%/include/gtk-2.0 test.c 
gcc test.o --mwindows -Wl,-luuid -L%gtk%/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lgobject-2.0 -lglib-2.0 -o test.exe 

Любые мысли? Что здесь разрушено GTK, gcc, MinGW? Некоторые параметры компилятора/компоновщика пропущены?

+0

Вы пытались запустить с помощью средства проверки утечки памяти, чтобы узнать, где была выделена утечка памяти? – ptomato

+0

Я тестировал под Win XP и под Win 7 (оба 32-разрядные), и я могу подтвердить, что утечки нет. – yCalleecharan

+0

Кажется, что этот: https://mail.gnome.org/archives/gtk-app-devel-list/2012-March/msg00009.html - та же проблема. – user1428934

ответ

1

Windows 7 64-bit, используя 32-bit MinGW и GTK+.

У меня есть аналогичный случай без звонка gtk_widget_queue_draw (GTK_WIDGET (vbox)); в функции Timer.

Мое впечатление, что это g_timeout_add(), которые вызывают утечку памяти (как сообщается на вкладке процесса в диспетчере задач Windows) PTL.

1

Это был GTK bug 685959. Большая часть утечки была зафиксирована в GTK 2.24.14.

Bug 707760 отслеживает обновления пакетов (бинарные файлы, комплект).

+0

У меня такая же проблема, и это действительно кажется ошибкой, связанной с утечкой. – Serrano

+0

Самая большая утечка была исправлена ​​с тех пор. Исправление доступно с GTK 2.24.14. – liberforce

+1

Правда, но, как я уже писал, для Windows еще нет пакета GTK + 2.24.14. Таким образом, вам придется либо скомпилировать исходный код, либо перейти на 2.24.0 в качестве временного решения (большая утечка была введена в 2.24.8). – Serrano

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