首页| 论坛| 消息

标题:关于modbus tcp通讯 QModbusReply内存累计增加的问题
作者:飞翔梦幻
日期:2020-12-16 14:49
内容:

请教论坛大神,这是怎么回事, 我每隔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);
// ..


#1 [20091001753 12-17 00:15]
auto reply = m_pModbusDevice->sendWriteRequest(writeUnit, iServerId);
connect(reply,&QModbusReply::finished,this,[&,reply]{
switch(reply->error()){
case QModbusDevice::NoError:break;
case QModbusDevice::ProtocolError:break;
default:qDebug()deleteLater();
});
#2 回 20091001753 的帖子 [飞翔梦幻 12-17 11:42]
20091001753:
auto reply = m_pModbusDevice->sendWriteRequest(writeUnit, iServerId);
connect(reply,&QModbusReply::finished,this,[&,reply]{
switch(reply->error()){
case QModbusDevice::NoError:break;
case QModbusDevice::ProtocolError:break;
.......
有一个 异步转同步的过程,在这个地方很容易 stack Flowover程序奔溃
QTimer timer;
timer.setSingleShot(true);
connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
timer.start(RW_TIMEOUT_MS);
loop.exec();
#3 回 飞翔梦幻 的帖子 [uidab 12-17 13:48]
飞翔梦幻:有一个 异步转同步的过程,在这个地方很容易 stack Flowover  程序奔溃
QTimer timer;
        timer.setSingleShot(true);
....... (2020-12-17 11:42) 
QTimer::singleShot(RW_TIMEOUT_MS,this,[=](){
pReply->deleteLater();
loop.quit();
});
也写成lambda形式
#4 回 uidab 的帖子 [飞翔梦幻 12-17 19:16]
uidab:QTimer::singleShot(RW_TIMEOUT_MS,this,[=](){
                 pReply->deleteLater();
               & .. (2020-12-17 13:48) 
这样可以 ,内存还是不断的增加
#5 回 飞翔梦幻 的帖子 [uidab 12-18 08:25]
飞翔梦幻:这样可以 ,内存还是不断的增加  (2020-12-17 19:16) 
那你改成智能指针试试

<< 1 2 >> (1/2)

回复 发表
主题 版块