2012-01-25 2 views
1

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

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

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

Window content not updated anymore

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

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

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

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

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

    gtk_main(); 

    gdk_threads_leave(); 
} 

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

+0

Хорошо, я проследил проблему дальше: область рисования виджета не получает экспозиции события больше. Вот почему он не перерисовывается. Вопрос в том, почему ... – lynix

ответ

2

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

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

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

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

  • Нет связанных вопросов^_^