From 81c2363119fc7b302d799a49b6f00373e590718a Mon Sep 17 00:00:00 2001 From: sunwen Date: Mon, 25 Sep 2023 13:43:00 +0800 Subject: [PATCH] Fix DmsAsyncAction and DmsSyncAction to responsed from timeout. --- src/device/DmsAsyncAction.cpp | 12 ++++++++++-- src/device/DmsAsyncAction.h | 1 + src/device/DmsSyncAction.cpp | 14 ++++---------- src/device/DmsSyncAction.h | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/device/DmsAsyncAction.cpp b/src/device/DmsAsyncAction.cpp index 6439962..5cc1db0 100644 --- a/src/device/DmsAsyncAction.cpp +++ b/src/device/DmsAsyncAction.cpp @@ -16,6 +16,7 @@ DmsAsyncAction::DmsAsyncAction(int aServerId, int aActionId, QObject* aObject, c , mObject(aObject) , mResponseSignal(aResponseSignal) , mSendData() + , mIsResponsed(false) { mTimer->setSingleShot(true); mTimer->setInterval(TIMEOUT_MSEC); @@ -31,6 +32,7 @@ DmsAsyncAction::~DmsAsyncAction() bool DmsAsyncAction::execute() { + mIsResponsed = false; QByteArray byteArray = mSendData.toUtf8(); uint8_t* data = reinterpret_cast(byteArray.data()); if(dmsmq_send(mServerId, mActionId, data, byteArray.size()) < 0) @@ -43,7 +45,10 @@ bool DmsAsyncAction::execute() void DmsAsyncAction::sendTimeoutSignal() { - emit timeout(); + if(!mIsResponsed) + { + emit timeout(); + } } void DmsAsyncAction::setTimeoutInterval(int aMsec) @@ -53,5 +58,8 @@ void DmsAsyncAction::setTimeoutInterval(int aMsec) void DmsAsyncAction::responsed() { - mTimer->stop(); + if(mTimer->isActive()) + { + mIsResponsed = true; + } } diff --git a/src/device/DmsAsyncAction.h b/src/device/DmsAsyncAction.h index b366b16..3b22678 100644 --- a/src/device/DmsAsyncAction.h +++ b/src/device/DmsAsyncAction.h @@ -42,6 +42,7 @@ private: QObject* mObject; QString mResponseSignal; QString mSendData; + bool mIsResponsed; }; #endif // DMSASYNCACTION_H diff --git a/src/device/DmsSyncAction.cpp b/src/device/DmsSyncAction.cpp index 531e8bd..eae3e0a 100644 --- a/src/device/DmsSyncAction.cpp +++ b/src/device/DmsSyncAction.cpp @@ -20,12 +20,11 @@ DmsSyncAction::DmsSyncAction(int aServerId, int aActionId, QObject* aObject, con , mTimeoutMsec(TIMEOUT_MSEC) , mSendData() , mActionResult() - , mIsTimeout(false) + , mIsResponsed(false) { mTimer->setSingleShot(true); connect(mObject, ("2" + mSignal).toStdString().c_str(), this, SLOT(saveActionResult(const QString&))); connect(mObject, ("2" + mSignal).toStdString().c_str(), mLoop, SLOT(quit())); - connect(mTimer, &QTimer::timeout, this, &DmsSyncAction::responsed); connect(mTimer, &QTimer::timeout, mLoop, &QEventLoop::quit); } @@ -33,12 +32,12 @@ DmsSyncAction::~DmsSyncAction() { disconnect(mObject, ("2" + mSignal).toStdString().c_str(), mLoop, SLOT(quit())); disconnect(mObject, ("2" + mSignal).toStdString().c_str(), this, SLOT(saveActionResult(const QString&))); - disconnect(mTimer, &QTimer::timeout, this, &DmsSyncAction::responsed); disconnect(mTimer, &QTimer::timeout, mLoop, &QEventLoop::quit); } DmsSyncActionResult DmsSyncAction::execute() { + mIsResponsed = false; QByteArray byteArray = mSendData.toUtf8(); uint8_t* data = reinterpret_cast(byteArray.data()); if(dmsmq_send(mServerId, mActionId, data, byteArray.size()) < 0) @@ -68,7 +67,7 @@ bool DmsSyncAction::waitUntilSignalReceived() { mTimer->start(mTimeoutMsec); mLoop->exec(); - if(mIsTimeout) + if(!mIsResponsed) { return false; } @@ -79,11 +78,6 @@ void DmsSyncAction::responsed() { if(mTimer->isActive()) { - mTimer->stop(); - mIsTimeout = false; - } - else - { - mIsTimeout = true; + mIsResponsed = true; } } diff --git a/src/device/DmsSyncAction.h b/src/device/DmsSyncAction.h index 169060f..b317658 100644 --- a/src/device/DmsSyncAction.h +++ b/src/device/DmsSyncAction.h @@ -44,7 +44,7 @@ private: int mTimeoutMsec; QString mSendData; QString mActionResult; - bool mIsTimeout; + bool mIsResponsed; }; #endif // DMSSYNCACTION_H