wxMathPlot を使用して、100 Hz 更新で更新されたデータのリアルタイム グラフを表示することは可能です。
以下は、3 つの wxMathplot インスタンスを使用するアプリのスクリーンショットで、すべて 128Hz で更新されているデータを示しています
古いデータが右側に表示され、新しいデータが右側に表示されるようなリアルタイム グラフが必要であるが、表示されるデータの量が最後の 10 秒間で一定である場合、mpFXYVector は使いにくいです。これに対処する方法については、この回答を参照してください。
ただし、最初のパスでは、このフレームワークで開始する必要があります
... in Myframe constructor
vector <double> xs, ys;
mpFXYVector * data_layer
mpWindow * graph;
// initialize
...
// Set up 100 Hz timer
...
MyFrame::OnTimer( ... )
{
// add new data point(s)
...
// copy data into layer
data_layer.SetData(xs,ys);
// redraw
graph->Fit();
/* Note that at this point we have requested a redraw
But it hasn't taken place yet
We need to return so that the windows system can update the screen etc
We will back in 1/100 sec to do it all again.
*/
}
では、問題は、この計画をどれだけ早く進めることができるかということです。呼び出された回数を追跡するだけのタイマー イベント ハンドラーを試してみました。
void MyFrame::OnTimer2(wxTimerEvent& )
{
static int ticks = 0;
ticks++;
static clock_t start;
if( ticks == 1 ) {
start = clock();
}
if( ticks == 1000 ) {
double duration = (double)(clock() - start) / CLOCKS_PER_SEC;
wxMessageBox(wxString::Format("1000 ticks in %f secs\n",duration));
myTimer->Stop();
return;
}
}
強力なデスクトップでこれを実行できる最速は 66 Hz です。
これは問題ですか?
私見、そうではありません。100Hz で更新されるグラフを人間の目で認識できる方法はありません。重要なことは、グラフが 100Hz で取得されたデータを損失や遅れなく表示することですが、グラフ表示をそれほど頻繁に更新する必要はありません。
したがって、この回答の上部にあるスクリーンショットを作成したアプリと、私が開発した他の同様のアプリでは、グラフは 10Hz で更新されており、wxWidgets フレームワークはこれを問題なく維持しており、データ取得ははるかに高い速度で行われています。別のスレッドまたはプロセスでの頻度。グラフ表示コードは、その間に取得したデータを 1 秒間に 10 回コピーし、表示を更新します。