C, GTK: окно перестает обновляться - PullRequest
1 голос
/ 26 января 2012

Я разрабатываю приложение, которое периодически рисует изображения в области рисования GTK внутри окна.

Рендеринг сначала работает хорошо, и содержимое окна перерисовывается, если я перетаскиваю другое окно поверх чертежа, ночерез некоторое случайное количество времени (несколько секунд) окно перестает обновляться.

Новые изображения не отображаются, и если я перетаскиваю другое окно поверх рендеринга, я получаю следующее:

Window content not updated anymore

Когда я нажимаю один из флажков под областью рисования, окно обновляется, и проблема исчезает еще несколько секунд.

Любая идея, что может сделатьПотоки GTK перестают обновлять содержимое окна?

Я не знаю, какая часть моего кода представляет интерес для ответа на этот вопрос, поэтому я вставил здесь в основном полную версию .

Мой GTK-main () называется так:

void window_main()
{
    pthread_create(&drawing_thread, NULL, img_draw, NULL);

    gtk_main();

    gdk_threads_leave();
}

Спасибо за любые подсказки!:)

1 Ответ

2 голосов
/ 27 января 2012

Нашли решение: в исходном примере кода, который я использовал ( здесь ), они используют g_timeout_add() для регистрации своей функции периодического рисования.

Зарегистрированная g_timeout_add() функция запускается gtk_main(), что означает, что она внутренне защищена gdk_threads_enter() и gdk_threads_leave(). Вот о чем я не знал.

Окружил мой звонок gtk_widget_queue_draw_area() этими двумя функциями и ошибка исчезла 8)

...