From dac1ee85f905101a7db965f0df0a6b7ed4575d1f Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 20 Jan 2018 07:22:19 +0100 Subject: [PATCH] Ref T232, some (dispatch) timer code was duplicated * fixed a bug, where a non existing timer was killed * unified code in base class --- src/blackcore/simulatorcommon.cpp | 12 +++++++++++- src/blackcore/simulatorcommon.h | 4 ++++ src/plugins/simulator/fs9/simulatorfs9.cpp | 5 ++--- src/plugins/simulator/fs9/simulatorfs9.h | 1 - .../simulator/fsxcommon/simulatorfsxcommon.cpp | 10 ++++------ src/plugins/simulator/fsxcommon/simulatorfsxcommon.h | 3 +-- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/blackcore/simulatorcommon.cpp b/src/blackcore/simulatorcommon.cpp index 44e259271..48c13131a 100644 --- a/src/blackcore/simulatorcommon.cpp +++ b/src/blackcore/simulatorcommon.cpp @@ -85,7 +85,10 @@ namespace BlackCore CLogMessage(this).info("Initialized simulator driver: '%1'") << m_simulatorPluginInfo.toQString(); } - CSimulatorCommon::~CSimulatorCommon() { } + CSimulatorCommon::~CSimulatorCommon() + { + this->safeKillTimer(); + } const CLogCategoryList &CSimulatorCommon::getLogCategories() { @@ -500,6 +503,13 @@ namespace BlackCore this->blinkHighlightedAircraft(); } + void CSimulatorCommon::safeKillTimer() + { + if (m_timerId < 0) { return; } + this->killTimer(m_timerId); + m_timerId = -1; + } + void CSimulatorCommon::onRecalculatedRenderedAircraft(const CAirspaceAircraftSnapshot &snapshot) { if (!snapshot.isValidSnapshot()) { return;} diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index 42eb9828c..849358d30 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -206,8 +206,12 @@ namespace BlackCore //! Slow timer used to highlight aircraft, can be used for other things too virtual void oneSecondTimerTimeout(); + //! Kill timer if id is valid + void safeKillTimer(); + bool m_pausedSimFreezesInterpolation = false; //!< paused simulator will also pause interpolation (so AI aircraft will hold) bool m_autoCalcAirportDistance = true; //!< automatically calculate airport distance and bearing + int m_timerId = -1; //!< dispatch timer id int m_statsUpdateAircraftCountMs = 0; //!< statistics update count qint64 m_statsUpdateAircraftTimeTotalMs = 0; //!< statistics update time qint64 m_statsUpdateAircraftTimeAvgMs = 0; //!< statistics update time diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index 074d16b70..24fa9fcd5 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -144,7 +144,7 @@ namespace BlackSimPlugin m_fsuipc->connect(); // connect FSUIPC too } initSimulatorInternals(); - m_dispatchTimerId = startTimer(50); + m_timerId = startTimer(50); return true; } @@ -154,8 +154,7 @@ namespace BlackSimPlugin // Don't forward messages when disconnected disconnect(m_connectionHostMessages); - killTimer(m_dispatchTimerId); - m_dispatchTimerId = -1; + safeKillTimer(); disconnectAllClients(); // disconnect FSUIPC and status diff --git a/src/plugins/simulator/fs9/simulatorfs9.h b/src/plugins/simulator/fs9/simulatorfs9.h index 087312191..2d3a4f3a8 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.h +++ b/src/plugins/simulator/fs9/simulatorfs9.h @@ -102,7 +102,6 @@ namespace BlackSimPlugin QHash> m_hashFs9Clients; QMetaObject::Connection m_connectionHostMessages; - int m_dispatchTimerId = -1; bool m_simConnected = false; //!< Is simulator connected? QSharedPointer m_fs9Host; QSharedPointer m_lobbyClient; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 347a9f6fe..8ef7af42d 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -90,7 +90,7 @@ namespace BlackSimPlugin // set structures and move on this->initEvents(); this->initDataDefinitionsWhenConnected(); - m_simConnectTimerId = startTimer(DispatchIntervalMs); + m_timerId = startTimer(DispatchIntervalMs); // do not start m_addPendingAircraftTimer here, it will be started when object was added return true; @@ -99,8 +99,7 @@ namespace BlackSimPlugin bool CSimulatorFsxCommon::disconnectFrom() { if (!m_simConnected) { return true; } - if (m_simConnectTimerId >= 0) { killTimer(m_simConnectTimerId); } - m_simConnectTimerId = -1; + this->safeKillTimer(); m_simSimulating = false; // treat as stopped, just setting the flag here avoids overhead of on onSimStopped if (m_hSimConnect) { @@ -338,7 +337,7 @@ namespace BlackSimPlugin { // reset complete state, we are going down m_simulatingChangedTs = QDateTime::currentMSecsSinceEpoch(); - if (m_simConnectTimerId >= 0) { killTimer(m_simConnectTimerId); } + this->safeKillTimer(); // if called from dispatch function, avoid that SimConnectProc disconnects itself while in SimConnectProc QTimer::singleShot(0, this, &CSimulatorFsxCommon::disconnectFrom); @@ -1503,8 +1502,7 @@ namespace BlackSimPlugin void CSimulatorFsxCommon::reset() { - if (m_simConnectTimerId >= 0) { killTimer(m_simConnectTimerId); } - m_simConnectTimerId = -1; + this->safeKillTimer(); m_simulatingChangedTs = -1; m_simConnected = false; m_simSimulating = false; diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index 61fb6cc3a..fd6acbfb8 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -154,7 +154,7 @@ namespace BlackSimPlugin //! @} //! Timer event (our SimConnect event loop), runs dispatch - //! \sa m_simconnectTimerId + //! \sa m_timerId //! \sa CSimulatorFsxCommon::dispatch virtual void timerEvent(QTimerEvent *event) override; @@ -354,7 +354,6 @@ namespace BlackSimPlugin bool m_traceSendId = false; //!< trace the send ids, meant for dedugging qint64 m_simulatingChangedTs = -1; //!< timestamp, when simulating changed (used to avoid jitter) int m_syncDeferredCounter = 0; //!< Set when synchronized, used to wait some time - int m_simConnectTimerId = -1; //!< Timer identifier int m_skipCockpitUpdateCycles = 0; //!< skip some update cycles to allow changes in simulator cockpit to be set int m_interpolationRequest = 0; //!< current interpolation request int m_dispatchErrors = 0; //!< number of dispatched failed, \sa dispatch