使用wxMathPlot显示更新为100 Hz更新数据的实时图是可行的。
以下是使用三个应用程序的截图wxMathplot的情况下,即在128Hz
如果你想的那种实时曲线图,其中旧数据消失在更新所有显示的数据左边是新数据出现在右边,但是显示的数据量在最后10秒时是恒定的,那么mpFXYVector使用起来会很尴尬。对于如何处理这样的讨论,请参阅this answer.
但是,对于第一次通过,这个框架应该让你开始
... 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赫兹。
这有关系吗?
恕我直言,它没有。人眼无法欣赏以100Hz更新的图形。重要的是该图显示的是以100Hz采集的数据,没有任何损失或滞后,但图形显示不需要频繁更新。
因此,在制作此答案顶部的屏幕截图的应用程序以及我开发的其他类似应用程序中,图形以10Hz更新,wxWidgets框架无需维护,数据采集正在发生在另一个线程或进程中频率更高。图表显示代码每秒十次复制同时获取的数据并更新显示。
你的显示器最好也至少做100Hz! – nmz787 2016-01-29 04:15:48