Приложение GTKmm + cairo для графики в реальном времени часто зависает
Я пишу приложение на C++, главное окно которого должно получать данные с сервера в режиме реального времени и рисовать графики и гистограммы в реальном времени на основе этих данных. Я использую GTK3 (на самом деле это привязка C++ gtkmm) и Cairo.
В частности, данные принимаются каждые 1 секунду из сети, и обновление происходит каждый раз, когда данные принимаются, то есть каждую 1 секунду. Обновление выполняется путем вызова метода invalidate_rect() для всей области рисования, функция которого on_draw() даже перерисовывает все рисунки и графики с использованием вновь полученных данных.
Теперь приложение работает, но оно крайне ненадежно. В частности, он очень часто зависает, особенно когда увеличивается загрузка процессора. Загрузка процессора моего приложения, а также памяти, очень низка. Внезапно окно становится серым и не отвечает, и мне нужно убить его с помощью Ctrl-C, так как даже нажатие на значок закрытия окна не работает.
Мне интересно: это неправильный подход для вызова invalidate_rect() в сценарии выше? Как лучше использовать GTKMM/Cairo для получения плавной графики надежным способом?