要求开发一个软件,实时接收数据绘图,同时要开启VR程序。
两个分别单独开都没问题,一起连动就会有点卡顿,并且在2-3分钟后程序会闪退。
一开始是用qpaint绘图的,后来听说qcustomplot更好一点,就用了这个。
但用处不大,一旦同步运行,程序依旧会闪退。
但同步运行也是可以运行2-3分钟,也不是一上来就马上闪退。看网上说画图可能比较占资源,但我看了在同步运行的时候内存其实都没满60%,CPU倒是一直在90%以上,到闪退的时候也是,内存没满,CPU也是勉强在95%以下,GPU就更少了。
那这个问题到底出在哪里,画图的代码如下:
void mainwindow::drawData (qreal y)
{
count++;
if(count>100)
{
ui->GLV->xAxis->setRange(count-100,count) //当数据量超过100,坐标图X轴自适应变化
}
double x = count;
ui->GLV->addGraph();
ui->GLV->graph(0)->addData(x,y); //添加数据
ui->GLV->replot();
if(count%200==0) //每画200次,将图清空。
{
ui->GLV->clearGraphs();
}
}
我的想法是因为程序不是一开始崩溃的,所以应该是图上积累的线条和点太多了,每次画都要画更多的点和线,因此跑着跑着就闪退了。
所以我想,如果每200个点后直接把图用 clear() 功能清了重新画,这样就可以和最开始程序的状态一样了。
但没什么用处,程序依旧会闪退。
我想问的是,程序崩溃的原因是什么,数据量太大了吗,还是我这个方法其实并没有清理掉之前点所占用的资源,又或是同步开了VR,画图真的不能一起运作。另外我所有的数据处理均在子线程,主线程只要负责接收数据画图就行了。
有没大佬可以指点一下~~~