refs #187, asyncConnectTo method to avoid freeze when starting GUI/Core

* as discussed in https://dev.vatsim-germany.org/issues/187#change-1183
* using no longer connectTo() but asyncConnectTo() in constructor of simulator context
* changed Interface doxygen comments to copydoc
This commit is contained in:
Klaus Basan
2014-04-29 14:04:59 +02:00
parent 526149f94d
commit c1acc1fa69
5 changed files with 42 additions and 19 deletions

View File

@@ -62,6 +62,9 @@ namespace BlackCore
//! \brief Connect to simulator //! \brief Connect to simulator
virtual bool connectTo() = 0; virtual bool connectTo() = 0;
//! \brief Connect to simulator (asynchronous version)
virtual void asyncConnectTo() = 0;
//! \brief Disconnect from simulator //! \brief Disconnect from simulator
virtual bool disconnectFrom() = 0; virtual bool disconnectFrom() = 0;

View File

@@ -24,7 +24,7 @@ namespace BlackCore
loadSimulatorPlugin(CSimulatorInfo::FSX()); loadSimulatorPlugin(CSimulatorInfo::FSX());
connect(m_updateTimer, &QTimer::timeout, this, &CContextSimulator::updateOwnAircraft); connect(m_updateTimer, &QTimer::timeout, this, &CContextSimulator::updateOwnAircraft);
connectTo(); asyncConnectTo();
} }
CContextSimulator::~CContextSimulator() CContextSimulator::~CContextSimulator()
@@ -64,6 +64,13 @@ namespace BlackCore
return m_simulator->connectTo(); return m_simulator->connectTo();
} }
void CContextSimulator::asyncConnectTo()
{
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);
if (!m_simulator || m_canConnectResult.isRunning()) return; // already checking
this->m_canConnectResult = QtConcurrent::run(this, &CContextSimulator::connectTo);
}
bool CContextSimulator::disconnectFrom() bool CContextSimulator::disconnectFrom()
{ {
if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO); if (this->getRuntime()->isSlotLogForSimulatorEnabled()) this->getRuntime()->logSlot(Q_FUNC_INFO);

View File

@@ -15,6 +15,7 @@
#include <QTimer> #include <QTimer>
#include <QDir> #include <QDir>
#include <QtConcurrent/QtConcurrent>
namespace BlackCore namespace BlackCore
{ {
@@ -39,13 +40,16 @@ namespace BlackCore
//! \copydoc IContextSimulator::isConnected() //! \copydoc IContextSimulator::isConnected()
virtual bool isConnected() const override; virtual bool isConnected() const override;
//! \brief Can we connect? //! \copydoc IContextSimulator::canConnect
virtual bool canConnect() override; virtual bool canConnect() override;
//! \brief Connect to simulator //! \copydoc IContextSimulator::connectTo
virtual bool connectTo() override; virtual bool connectTo() override;
//! \brief Disconnect from simulator //! \copydoc IContextSimulator::asyncConnectTo
virtual void asyncConnectTo() override;
//! \copydoc IContextSimulator::disconnectFrom
virtual bool disconnectFrom() override; virtual bool disconnectFrom() override;
//! \copydoc IContextSimulator::getOwnAircraft() //! \copydoc IContextSimulator::getOwnAircraft()
@@ -88,6 +92,7 @@ namespace BlackCore
QTimer *m_updateTimer; QTimer *m_updateTimer;
QDir m_pluginsDir; QDir m_pluginsDir;
QSet<ISimulatorFactory *> m_simulatorFactories; QSet<ISimulatorFactory *> m_simulatorFactories;
QFuture<bool> m_canConnectResult;
}; };
} // namespace BlackCore } // namespace BlackCore

View File

@@ -48,6 +48,11 @@ namespace BlackCore
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("connectTo")); return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("connectTo"));
} }
void CContextSimulatorProxy::asyncConnectTo()
{
m_dBusInterface->callDBus(QLatin1Literal("asyncConnectTo"));
}
bool CContextSimulatorProxy::disconnectFrom() bool CContextSimulatorProxy::disconnectFrom()
{ {
return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("disconnectFrom")); return m_dBusInterface->callDBusRet<bool>(QLatin1Literal("disconnectFrom"));

View File

@@ -42,13 +42,16 @@ namespace BlackCore
//! \copydoc IContextSimulator::isConnected() //! \copydoc IContextSimulator::isConnected()
virtual bool isConnected() const override; virtual bool isConnected() const override;
//! \brief Can we connect? //! \copydoc IContextSimulator::canConnect
virtual bool canConnect() override; virtual bool canConnect() override;
//! \brief Connect to simulator //! \copydoc IContextSimulator::connectTo
virtual bool connectTo() override; virtual bool connectTo() override;
//! \brief Disconnect from simulator //! \copydoc IContextSimulator::asyncConnectTo
virtual void asyncConnectTo() override;
//! \copydoc IContextSimulator::disconnectFrom
virtual bool disconnectFrom() override; virtual bool disconnectFrom() override;
//! \copydoc IContextSimulator::getOwnAircraft() //! \copydoc IContextSimulator::getOwnAircraft()