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