mirror of
https://github.com/monero-project/monero-gui.git
synced 2026-04-09 22:37:26 -04:00
qt: implement FutureScheduler, always await async code to complete
This commit is contained in:
@@ -131,19 +131,12 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
|
||||
}
|
||||
|
||||
// Start start watcher
|
||||
QFuture<bool> future = QtConcurrent::run(this, &DaemonManager::startWatcher, nettype);
|
||||
QFutureWatcher<bool> * watcher = new QFutureWatcher<bool>();
|
||||
connect(watcher, &QFutureWatcher<bool>::finished,
|
||||
this, [this, watcher]() {
|
||||
QFuture<bool> future = watcher->future();
|
||||
watcher->deleteLater();
|
||||
if(future.result())
|
||||
m_scheduler.run([this, nettype] {
|
||||
if (startWatcher(nettype))
|
||||
emit daemonStarted();
|
||||
else
|
||||
emit daemonStartFailure();
|
||||
});
|
||||
watcher->setFuture(future);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -155,17 +148,12 @@ bool DaemonManager::stop(NetworkType::Type nettype)
|
||||
qDebug() << message;
|
||||
|
||||
// Start stop watcher - Will kill if not shutting down
|
||||
QFuture<bool> future = QtConcurrent::run(this, &DaemonManager::stopWatcher, nettype);
|
||||
QFutureWatcher<bool> * watcher = new QFutureWatcher<bool>();
|
||||
connect(watcher, &QFutureWatcher<bool>::finished,
|
||||
this, [this, watcher]() {
|
||||
QFuture<bool> future = watcher->future();
|
||||
watcher->deleteLater();
|
||||
if(future.result()) {
|
||||
m_scheduler.run([this, nettype] {
|
||||
if (stopWatcher(nettype))
|
||||
{
|
||||
emit daemonStopped();
|
||||
}
|
||||
});
|
||||
watcher->setFuture(future);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -330,6 +318,7 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
|
||||
|
||||
DaemonManager::DaemonManager(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_scheduler(this)
|
||||
{
|
||||
|
||||
// Platform depetent path to monerod
|
||||
@@ -344,3 +333,8 @@ DaemonManager::DaemonManager(QObject *parent)
|
||||
m_has_daemon = false;
|
||||
}
|
||||
}
|
||||
|
||||
DaemonManager::~DaemonManager()
|
||||
{
|
||||
m_scheduler.shutdownWaitForFinished();
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <QUrl>
|
||||
#include <QProcess>
|
||||
#include <QVariantMap>
|
||||
#include "qt/FutureScheduler.h"
|
||||
#include "NetworkType.h"
|
||||
|
||||
class DaemonManager : public QObject
|
||||
@@ -71,6 +72,8 @@ public slots:
|
||||
|
||||
private:
|
||||
explicit DaemonManager(QObject *parent = 0);
|
||||
~DaemonManager();
|
||||
|
||||
static DaemonManager * m_instance;
|
||||
static QStringList m_clArgs;
|
||||
QProcess *m_daemon;
|
||||
@@ -79,6 +82,7 @@ private:
|
||||
bool m_has_daemon = true;
|
||||
bool m_app_exit = false;
|
||||
|
||||
FutureScheduler m_scheduler;
|
||||
};
|
||||
|
||||
#endif // DAEMONMANAGER_H
|
||||
|
||||
Reference in New Issue
Block a user