Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Chinese
  4. 使用modbus导致内存溢出

使用modbus导致内存溢出

Scheduled Pinned Locked Moved Unsolved Chinese
2 Posts 1 Posters 623 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bigWave
    wrote on last edited by bigWave
    #1

    用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;
    
    
    
    }
    
    1 Reply Last reply
    0
    • B Offline
      B Offline
      bigWave
      wrote on last edited by
      #2

      代码是单线程的,使用qApp->processEvents(); reply=NULL, 也没有让内存停止上涨

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved