From b00d67e90ce791762f020e18b62607c29a7471a0 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Tue, 2 Sep 2014 20:37:58 +0200 Subject: [PATCH] refs #308 improved client thread handling and cleanup Threads are now waiting for closure --- src/plugins/simulator/fs9/fs9_client.cpp | 6 ++---- src/plugins/simulator/fs9/simulator_fs9.cpp | 18 +++++++----------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/plugins/simulator/fs9/fs9_client.cpp b/src/plugins/simulator/fs9/fs9_client.cpp index 4a768863b..c0e223699 100644 --- a/src/plugins/simulator/fs9/fs9_client.cpp +++ b/src/plugins/simulator/fs9/fs9_client.cpp @@ -58,8 +58,6 @@ namespace BlackSimPlugin void CFs9Client::disconnectFrom() { - qDebug() << "Disconnecting..."; - killTimer(m_timerId); closeConnection(); } @@ -258,7 +256,7 @@ namespace BlackSimPlugin m_timerId = startTimer(m_updateInterval.value(CTimeUnit::ms())); m_clientStatus = Connected; - emit statusChanged(m_clientStatus); + emit statusChanged(m_callsign, m_clientStatus); return hr; } @@ -276,7 +274,7 @@ namespace BlackSimPlugin } m_clientStatus = Disconnected; - emit statusChanged(m_clientStatus); + emit statusChanged(m_callsign, m_clientStatus); return hr; } } diff --git a/src/plugins/simulator/fs9/simulator_fs9.cpp b/src/plugins/simulator/fs9/simulator_fs9.cpp index 7421fc9a7..89e162796 100644 --- a/src/plugins/simulator/fs9/simulator_fs9.cpp +++ b/src/plugins/simulator/fs9/simulator_fs9.cpp @@ -59,8 +59,12 @@ namespace BlackSimPlugin CSimulatorFs9::~CSimulatorFs9() { + disconnectFrom(); m_hostThread.quit(); m_hostThread.wait(1000); + + QList clientThreads = m_fs9ClientThreads.values(); + for (QThread *clientThread : clientThreads) clientThread->wait(); } bool CSimulatorFs9::isConnected() const @@ -118,6 +122,7 @@ namespace BlackSimPlugin connect(clientThread, &QThread::started, client, &CFs9Client::init); connect(client, &CFs9Client::clientTimedOut, this, &CSimulatorFs9::ps_removeAircraft); + connect(client, &CFs9Client::statusChanged, this, &CSimulatorFs9::ps_changeClientStatus); m_fs9ClientThreads.insert(client, clientThread); m_hashFs9Clients.insert(callsign, client); clientThread->start(); @@ -287,7 +292,9 @@ namespace BlackSimPlugin } case CFs9Host::Terminated: { + m_fs9Host->deleteLater(); qDebug() << "Quitting thread"; + connect(&m_hostThread, &QThread::finished, &m_hostThread, &QThread::deleteLater); m_hostThread.quit(); m_isHosting = false; emit statusChanged(Disconnected); @@ -325,19 +332,8 @@ namespace BlackSimPlugin CFs9Client *fs9Client = m_hashFs9Clients.value(callsign); - Q_ASSERT(m_fs9ClientThreads.contains(fs9Client)); - QThread *fs9ClientThread = m_fs9ClientThreads.value(fs9Client); - // Send an async disconnect signal. When finished we will clean up QMetaObject::invokeMethod(fs9Client, "disconnectFrom"); - - m_fs9ClientThreads.remove(fs9Client); - m_hashFs9Clients.remove(callsign); - - fs9ClientThread->wait(100); - - /*fs9ClientThread->deleteLater(); - fs9Client->deleteLater();*/ } void CSimulatorFs9::updateOwnAircraftFromSim(const CAircraft &ownAircraft)