请教论坛大神,这是怎么回事, 我每隔100ms连续不断的往plc存储器里写值,都能够写入,但是内存会不断的累计增加,知道最后程序奔溃...
可能是QModbusReply没完全释放掉。
void CModbusTcpClientWorker::onWriteCoils(int iStartAddr, quint16 uValue, int iServerId)
{
QModbusDataUnit writeUnit(QModbusDataUnit::Coils, iStartAddr, 1);
writeUnit.setValue(0, uValue);
bool bWriteResult = false;
QEventLoop loop;
QModbusReply* pReply = m_pModbusDevice->sendWriteRequest(writeUnit, iServerId);
if (NULL != pReply)
{
QMetaObject::Connection con = connect(pReply, &QModbusReply::finished, this, [&] {
if (pReply->error() == QModbusDevice::NoError)
{
bWriteResult = true;
}
else if (pReply->error() == QModbusDevice::ProtocolError)
{
//QString strErrorMsg = QString("Write Coils response error: %1 (Modbus exception: 0x%2)")
// .arg(pReply->errorString())
// .arg(pReply->rawResult().exceptionCode(), -1, 16);
//m_Savelog.writeLog(m_Savelog.path, strErrorMsg);
//ErrorMessage(strErrorMsg);
}
else
{
//QString strErrorMsg = QString("Write Coils response error: %1 (code: 0x%2)").
// arg(pReply->errorString()).
// arg(pReply->error(), -1, 16);
//m_Savelog.writeLog(m_Savelog.path, strErrorMsg);
}
loop.quit();
connect(pReply, &QModbusReply::finished, pReply, &QModbusReply::deleteLater);
}
);
connect(pReply, &QModbusReply::finished, pReply, &QModbusReply::deleteLater);
QTimer timer;
timer.setSingleShot(true);
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(RW_TIMEOUT_MS);
loop.exec();
QObject::disconnect(con);
//pReply->deleteLater();
}
emit writeCoilsResult(bWriteResult, iStartAddr, uValue);
}