diff --git a/include/measurementDataManager.h b/include/measurementDataManager.h index 7949e57..3945e3a 100644 --- a/include/measurementDataManager.h +++ b/include/measurementDataManager.h @@ -5,6 +5,7 @@ #include #include #include +#include class QSettings; class QNetworkAccessManager; @@ -27,6 +28,7 @@ public: private slots: void onReceiveRealtimeData(const QString& dataMsg); void onHistoricalRequestFinished(const QString& dataID, QNetworkReply* reply); + void cleanUpDataCache(); private: struct RealtimeConfig @@ -95,6 +97,8 @@ private: //数据缓存 QHash> m_dataCache; + QTimer m_dataCleanupTimer; + int m_dataCleanupInterval; //请求记录 QHash> m_dataRequesetRecord; diff --git a/include/measurementDataUtils.h b/include/measurementDataUtils.h index 4c4e1d6..3ed255f 100644 --- a/include/measurementDataUtils.h +++ b/include/measurementDataUtils.h @@ -49,7 +49,7 @@ public: private: QString m_id; - QSet m_timestamps; //用于快速查找是否存在改时间戳的数据 + QSet m_timestamps; //用于快速查找是否存在该时间戳的数据 QMap m_data; //按时间戳对数据点进行排序 qint64 m_latestTimestamp; }; diff --git a/source/measurementDataManager.cpp b/source/measurementDataManager.cpp index 6290f71..90e6e17 100644 --- a/source/measurementDataManager.cpp +++ b/source/measurementDataManager.cpp @@ -55,6 +55,11 @@ void MeasurementDataManager::initialize() m_isVaildSettingsFile = false; LOG_ERROR("ReadSettingInfo", "load measurementDataService_config.ini failed"); } + + //开启缓存数据的定期清理 + m_dataCleanupInterval = 10 * 1000; + m_dataCleanupTimer.setInterval(m_dataCleanupInterval); + connect(&m_dataCleanupTimer, &QTimer::timeout, this, &MeasurementDataManager::cleanUpDataCache); } void MeasurementDataManager::buildSubscriptionRequest(const QString& action, const QStringList& measurements) @@ -464,3 +469,12 @@ void MeasurementDataManager::onHistoricalRequestFinished(const QString& dataID, reply->deleteLater(); } + +void MeasurementDataManager::cleanUpDataCache() +{ + qint64 cleanupTimestame = QDateTime::currentMSecsSinceEpoch() - (m_dataCleanupInterval * 1000); + for(auto measurementData : std::as_const(m_dataCache)) + { + measurementData->cleanupOldData(cleanupTimestame); + } +}