diff --git a/dataPanel/dpBarsChart.cpp b/dataPanel/dpBarsChart.cpp index 3035660..2b3427b 100644 --- a/dataPanel/dpBarsChart.cpp +++ b/dataPanel/dpBarsChart.cpp @@ -211,7 +211,8 @@ void dpBarsChart::setDateTime(const QDateTime& dateTime) if(data.timestamp == 0) continue; - static double marginFactor = 1.0; + //qDebug() << it.key() << ": " << data.value; + static double marginFactor = 0.0; double dData = data.value; Bars bar = it.value(); //调整所在轴的范围 diff --git a/include/measurementDataManager.h b/include/measurementDataManager.h index 3945e3a..eb2fe95 100644 --- a/include/measurementDataManager.h +++ b/include/measurementDataManager.h @@ -5,7 +5,6 @@ #include #include #include -#include class QSettings; class QNetworkAccessManager; @@ -19,6 +18,7 @@ class MeasurementDataManager : public QObject public: static MeasurementDataManager* instance(); + static void destroyInstance(); void requestData(const QStringList& measurements, QObject* requester); void cancelRequest(const QStringList& measurements, QObject* requester); @@ -71,6 +71,20 @@ private: explicit MeasurementDataManager(); ~MeasurementDataManager(); + static MeasurementDataManager* m_instance; + + class CGarbo + { + public: + CGarbo() {}; + ~CGarbo() + { + if(m_instance) + delete m_instance; + m_instance = nullptr; + } + }; + void initialize(); //实时数据 void buildSubscriptionRequest(const QString& action, const QStringList& measurements); diff --git a/include/measurementDataUtils.h b/include/measurementDataUtils.h index 3ed255f..1ff563b 100644 --- a/include/measurementDataUtils.h +++ b/include/measurementDataUtils.h @@ -4,6 +4,7 @@ #include "networkCommon.h" #include #include +#include struct MeasurementDataPoint { @@ -59,7 +60,6 @@ private: * * 负责与后台数据服务建立WebSocket连接,接收实时数据 */ -class QTimer; class WebSocketClient : public QObject { Q_OBJECT @@ -97,7 +97,7 @@ private: QUrl m_serverUrl; //重连相关 - QTimer* m_reconnectTimer; + QTimer m_reconnectTimer; int m_reconnectInterval; int m_reconnectAttempts; int m_maxReconnectAttempts; diff --git a/source/main.cpp b/source/main.cpp index 7fca72c..40652af 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -3,6 +3,7 @@ #include #include #include +#include "measurementDataManager.h" int main(int argc, char *argv[]) { @@ -28,5 +29,7 @@ int main(int argc, char *argv[]) QApplication a(argc, argv); MainWindow w; w.showMaximized(); - return a.exec(); + int ret = a.exec(); + MeasurementDataManager::destroyInstance(); + return ret; } diff --git a/source/measurementDataManager.cpp b/source/measurementDataManager.cpp index 59c118d..750f74c 100644 --- a/source/measurementDataManager.cpp +++ b/source/measurementDataManager.cpp @@ -14,10 +14,25 @@ #include #include +MeasurementDataManager* MeasurementDataManager::m_instance = nullptr; + MeasurementDataManager* MeasurementDataManager::instance() { - static MeasurementDataManager instance; - return &instance; + // static MeasurementDataManager instance; + // return &instance; + + //不采用静态局部变量的方式实现,因为QTimer析构时需要依赖事件循环,静态局部变量的释放实在main函数之后,此时事件循环已退出(app.exec()) + //所以增加destroyInstance(),在main函数退出之前显示调用,即可规避此问题 + if(!m_instance) + m_instance = new MeasurementDataManager(); + return m_instance; +} + +void MeasurementDataManager::destroyInstance() +{ + if(m_instance) + delete m_instance; + m_instance = nullptr; } MeasurementDataManager::MeasurementDataManager() @@ -25,12 +40,14 @@ MeasurementDataManager::MeasurementDataManager() , m_networkManager(new QNetworkAccessManager(this)) , m_webSocketClient(new WebSocketClient(this)) { + //static CGarbo garbo; initialize(); connect(m_webSocketClient, &WebSocketClient::dataReceived, this, &MeasurementDataManager::onReceiveRealtimeData); } MeasurementDataManager::~MeasurementDataManager() -{} +{ +} void MeasurementDataManager::initialize() { @@ -59,6 +76,7 @@ void MeasurementDataManager::initialize() //开启缓存数据的定期清理 m_dataCleanupInterval = 10 * 1000; m_dataCleanupTimer.setInterval(m_dataCleanupInterval); + m_dataCleanupTimer.start(); connect(&m_dataCleanupTimer, &QTimer::timeout, this, &MeasurementDataManager::cleanUpDataCache); } diff --git a/source/measurementDataUtils.cpp b/source/measurementDataUtils.cpp index 7c5310b..d68334b 100644 --- a/source/measurementDataUtils.cpp +++ b/source/measurementDataUtils.cpp @@ -67,15 +67,15 @@ WebSocketClient::WebSocketClient(QObject* parent) , m_webSocket(nullptr) , m_connected(false) , m_connectionStatus(ConnectionStatus::Disconnected) - , m_reconnectTimer(new QTimer(this)) + //, m_reconnectTimer(new QTimer(this)) , m_reconnectInterval(5000) //默认5秒重连 , m_reconnectAttempts(0) , m_maxReconnectAttempts(10) //默认最多重连10次 { setupWebSocket(); - m_reconnectTimer->setSingleShot(true); - connect(m_reconnectTimer, &QTimer::timeout, this, &WebSocketClient::onReconnectTimeout); + m_reconnectTimer.setSingleShot(true); + connect(&m_reconnectTimer, &QTimer::timeout, this, &WebSocketClient::onReconnectTimeout); } WebSocketClient::~WebSocketClient() @@ -166,7 +166,8 @@ void WebSocketClient::scheduleReconnect() // 限制最大延迟为5分钟 delay = qMin(delay, 300000);*/ - m_reconnectTimer->start(delay); + // m_reconnectTimer->start(delay); + m_reconnectTimer.start(delay); m_reconnectAttempts++; m_connectionStatus = ConnectionStatus::Reconncting; } @@ -174,8 +175,10 @@ void WebSocketClient::scheduleReconnect() void WebSocketClient::resetReconnect() { - if(m_reconnectTimer->isActive()) - m_reconnectTimer->stop(); + // if(m_reconnectTimer->isActive()) + // m_reconnectTimer->stop(); + if(m_reconnectTimer.isActive()) + m_reconnectTimer.stop(); m_reconnectAttempts = 0; }