Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Timeout timer deleting inside fnx reading Modbus reply

Timeout timer deleting inside fnx reading Modbus reply

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 2 Posters 314 Views 1 Watching
  • 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.
  • qtprogrammer123Q Offline
    qtprogrammer123Q Offline
    qtprogrammer123
    wrote on last edited by
    #1

    Hi, i wonna ask if this way of deleting qtimer its 100% safe

     QModbusDataUnit readDataUnit(QModbusDataUnit::RegisterType::InputRegisters, addr, count);
        if (auto *reply = m_modbus->sendReadRequest(readDataUnit, serverAddr)) {
            if (!reply->isFinished()) {
                QTimer* replyTimer = new QTimer();
                replyTimer->setSingleShot(true);
                connect(replyTimer, &QTimer::timeout, this, [=]() {
                    m_modbus->disconnect();
                    replyTimer->stop();
                    replyTimer->deleteLater();
    
                    if(reply)
                        delete reply;
    
                    emit stateChanged(QModbusDevice::UnconnectedState);
                });
                replyTimer->start(ModbusDevice::replyTimeout);
    
                connect(reply, &QModbusReply::errorOccurred, this, &ModbusDevice::errorOccurred);
                connect(reply, &QModbusReply::finished, this, [=]() {
                    if (replyTimer) {
                        replyTimer->stop();
                        replyTimer->deleteLater();
                    }
    
                    if (!reply)
                        return;
    
                    if (reply->error() == QModbusDevice::NoError) {
                        const QModbusDataUnit unit = reply->result();
    
                        emit dataPooled(QModbusDataUnit::InputRegisters, unit.values(), extraParm);
                    }
                    reply->deleteLater();
                });
            }
            else
                delete reply;
        }
    

    Mam moc jak Harry Potter, w zębach mogę przenieść hotel.

    jsulmJ qtprogrammer123Q 2 Replies Last reply
    0
    • qtprogrammer123Q qtprogrammer123

      Hi, i wonna ask if this way of deleting qtimer its 100% safe

       QModbusDataUnit readDataUnit(QModbusDataUnit::RegisterType::InputRegisters, addr, count);
          if (auto *reply = m_modbus->sendReadRequest(readDataUnit, serverAddr)) {
              if (!reply->isFinished()) {
                  QTimer* replyTimer = new QTimer();
                  replyTimer->setSingleShot(true);
                  connect(replyTimer, &QTimer::timeout, this, [=]() {
                      m_modbus->disconnect();
                      replyTimer->stop();
                      replyTimer->deleteLater();
      
                      if(reply)
                          delete reply;
      
                      emit stateChanged(QModbusDevice::UnconnectedState);
                  });
                  replyTimer->start(ModbusDevice::replyTimeout);
      
                  connect(reply, &QModbusReply::errorOccurred, this, &ModbusDevice::errorOccurred);
                  connect(reply, &QModbusReply::finished, this, [=]() {
                      if (replyTimer) {
                          replyTimer->stop();
                          replyTimer->deleteLater();
                      }
      
                      if (!reply)
                          return;
      
                      if (reply->error() == QModbusDevice::NoError) {
                          const QModbusDataUnit unit = reply->result();
      
                          emit dataPooled(QModbusDataUnit::InputRegisters, unit.values(), extraParm);
                      }
                      reply->deleteLater();
                  });
              }
              else
                  delete reply;
          }
      
      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @qtprogrammer123 You're not deleting the timer in case of an error

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      qtprogrammer123Q 1 Reply Last reply
      0
      • qtprogrammer123Q qtprogrammer123

        Hi, i wonna ask if this way of deleting qtimer its 100% safe

         QModbusDataUnit readDataUnit(QModbusDataUnit::RegisterType::InputRegisters, addr, count);
            if (auto *reply = m_modbus->sendReadRequest(readDataUnit, serverAddr)) {
                if (!reply->isFinished()) {
                    QTimer* replyTimer = new QTimer();
                    replyTimer->setSingleShot(true);
                    connect(replyTimer, &QTimer::timeout, this, [=]() {
                        m_modbus->disconnect();
                        replyTimer->stop();
                        replyTimer->deleteLater();
        
                        if(reply)
                            delete reply;
        
                        emit stateChanged(QModbusDevice::UnconnectedState);
                    });
                    replyTimer->start(ModbusDevice::replyTimeout);
        
                    connect(reply, &QModbusReply::errorOccurred, this, &ModbusDevice::errorOccurred);
                    connect(reply, &QModbusReply::finished, this, [=]() {
                        if (replyTimer) {
                            replyTimer->stop();
                            replyTimer->deleteLater();
                        }
        
                        if (!reply)
                            return;
        
                        if (reply->error() == QModbusDevice::NoError) {
                            const QModbusDataUnit unit = reply->result();
        
                            emit dataPooled(QModbusDataUnit::InputRegisters, unit.values(), extraParm);
                        }
                        reply->deleteLater();
                    });
                }
                else
                    delete reply;
            }
        
        qtprogrammer123Q Offline
        qtprogrammer123Q Offline
        qtprogrammer123
        wrote on last edited by
        #3

        @qtprogrammer123 said in Timeout timer deleting inside fnx reading Modbus reply:

        Hi, i wonna ask if this way of deleting qtimer its 100% safe

         QModbusDataUnit readDataUnit(QModbusDataUnit::RegisterType::InputRegisters, addr, count);
            if (auto *reply = m_modbus->sendReadRequest(readDataUnit, serverAddr)) {
                if (!reply->isFinished()) {
                    QTimer* replyTimer = new QTimer();
                    replyTimer->setSingleShot(true);
                    connect(replyTimer, &QTimer::timeout, this, [=]() {
                        m_modbus->disconnect();
                        replyTimer->stop();
                        replyTimer->deleteLater();
        
                        if(reply)
                            delete reply;
        
                        emit stateChanged(QModbusDevice::UnconnectedState);
                    });
                    replyTimer->start(ModbusDevice::replyTimeout);
        
                    connect(reply, &QModbusReply::errorOccurred, this, &ModbusDevice::errorOccurred);
                    connect(reply, &QModbusReply::finished, this, [=]() {
                        if (replyTimer) {
                            replyTimer->stop();
                            replyTimer->deleteLater();
                        }
        
                        if (!reply)
                            return;
        
                        if (reply->error() == QModbusDevice::NoError) {
                            const QModbusDataUnit unit = reply->result();
        
                            emit dataPooled(QModbusDataUnit::InputRegisters, unit.values(), extraParm);
                        }
                        reply->deleteLater();
                    });
                }
                else
                    delete reply;
            }
        

        destroy queue now look like this:
        comming reply -> delete timer -> delete reply

        Mam moc jak Harry Potter, w zębach mogę przenieść hotel.

        1 Reply Last reply
        0
        • jsulmJ jsulm

          @qtprogrammer123 You're not deleting the timer in case of an error

          qtprogrammer123Q Offline
          qtprogrammer123Q Offline
          qtprogrammer123
          wrote on last edited by
          #4

          @jsulm yes i am, after errorOccured finished signal comes anyway

          Mam moc jak Harry Potter, w zębach mogę przenieść hotel.

          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