メイン ウィンドウがサーバーからリアルタイム データを受信し、このデータに基づいてプロットとヒストグラムをリアルタイムで描画する必要がある C++ アプリケーションを作成しています。私は GTK3 (実際には C++ バインディング gtkmm) と Cairo を使用しています。
特に、データはネットワークから 1 秒ごとに受信され、データが受信されるたびに、つまり 1 秒ごとに更新が行われます。更新は、描画領域全体に対して invalidate_rect() メソッドを呼び出すことによって行われます。その on_draw() は、新しく受信したデータを使用してすべての図とプロットを再描画します。
現在、アプリケーションは動作しますが、非常に信頼できません。特に、特に CPU 負荷が増加すると、頻繁にフリーズします。アプリケーションの CPU 使用率とメモリが非常に低いです。突然、ウィンドウが灰色になり、応答しなくなりました。ウィンドウを閉じるアイコンを押しても機能しないため、Ctrl-C でウィンドウを強制終了する必要があります。
私は疑問に思っています:上記のシナリオで invalidate_rect() を呼び出すのは間違ったアプローチですか? GTKMM/Cairo を使用して、信頼できる方法で滑らかなグラフィックを取得するためのより良い方法は何ですか?