使用modbus导致内存溢出
-
用timer 定时50毫秒向串口发送数据,内存在一直上涨
if (auto *reply = modbusdevice->sendReadRequest(mbreg[flashpage1].mbunit, 1)) { if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, &MainWindow::readReady); hadsendread = 1; } else delete reply; // broadcast replies return immediately } else { ui->textEdit->append("连接异常:"+modbusdevice->errorString()); ui->textEdit->setStyleSheet("background-color:WHITE;"); reply->deleteLater(); // qDebug()<<reply->objectName(); }这个是槽函数
void MainWindow::readReady()//刷新数据,按钮 { quint16 a, b,c,d; QModbusReply *reply = qobject_cast<QModbusReply *>(sender()); if (!reply) { return; } if(mbreg[flashpage1].StartAdress == reply->result().startAddress()) {mbreg[flashpage1].mbunit = reply->result();} b = mbreg[flashpage1].mbunit.value(0); a = mbreg[flashpage1].mbunit.value(1); d = mbreg[flashpage1].mbunit.value(2); c = mbreg[flashpage1].mbunit.value(3); mbreg[flashpage1].mbcurrentvalue = datadisplay(a,b,mbreg[flashpage1].mbdigit,mbreg[flashpage1].displaypoint); mbreg[flashpage1].HL = a; mbreg[flashpage1].LL = b; //datadiaplay 1,数据低位,2数据高位,3,数据类型,4,小数点显示位置 switch (flashpage1) { //case 0: ui->FHalfStrip->setText(datadisplay(a,b,"32",2));break; case 1:machinealarm();break; case 2:machinealarm();break; case 3:machinealarm();break; case 4:machinestate();break; case 5:tablewightstate();break; case 6:tablewightstate();break; case 7:if(mbreg[flashpage1].mbcurrentvalue != mbreg[flashpage1].mboldvalue){ui->DT32510->setText(mbreg[flashpage1].mbcurrentvalue);mbreg[flashpage1].mboldvalue = mbreg[flashpage1].mbcurrentvalue;};break; case 8:if(mbreg[flashpage1].mbcurrentvalue != mbreg[flashpage1].mboldvalue){ui->DT32496->setText(mbreg[flashpage1].mbcurrentvalue);mbreg[flashpage1].mboldvalue = mbreg[flashpage1].mbcurrentvalue;};break; case 9:if(mbreg[flashpage1].mbcurrentvalue != mbreg[flashpage1].mboldvalue){ui->DT32464->setText(mbreg[flashpage1].mbcurrentvalue);mbreg[flashpage1].mboldvalue = mbreg[flashpage1].mbcurrentvalue;};break; case 10:if(mbreg[flashpage1].mbcurrentvalue != mbreg[flashpage1].mboldvalue){ui->DT32466->setText(mbreg[flashpage1].mbcurrentvalue);mbreg[flashpage1].mboldvalue = mbreg[flashpage1].mbcurrentvalue;};break; case 11:if(mbreg[flashpage1].mbcurrentvalue != mbreg[flashpage1].mboldvalue){ui->DT32458->setText(mbreg[flashpage1].mbcurrentvalue);mbreg[flashpage1].mboldvalue = mbreg[flashpage1].mbcurrentvalue;};break; case 12:break; case 13: break; case 2003: filedialog->buttonlock+=1;if(filedialog->buttonlock>1){filedialog->bottonenable();};break; case 2101:dialog_datelock->flashunlockcode();break; default:break; } flashpage1 += 1; if(flashpage1 >= (ypageindex+pagenumber)) { flashpage1 = ypageindex; } hadsendread = 0; if(repageindex ==1 ) { flashpage1 = 0; ypageindex = 0; pagenumber = ValueTotal_mianwindow; repageindex = 0; } reply->deleteLater(); reply=NULL; }