mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-10 22:18:54 +01:00
qt: Add BitcoinCore::m_thread member
This change makes BitcoinCore self-contained to improve its re-usability. BitcoinApplication::coreThread member is now unused, and removed.
This commit is contained in:
@@ -158,6 +158,16 @@ void DebugMessageHandler(QtMsgType type, const QMessageLogContext& context, cons
|
|||||||
BitcoinCore::BitcoinCore(interfaces::Node& node) :
|
BitcoinCore::BitcoinCore(interfaces::Node& node) :
|
||||||
QObject(), m_node(node)
|
QObject(), m_node(node)
|
||||||
{
|
{
|
||||||
|
this->moveToThread(&m_thread);
|
||||||
|
m_thread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
BitcoinCore::~BitcoinCore()
|
||||||
|
{
|
||||||
|
qDebug() << __func__ << ": Stopping thread";
|
||||||
|
m_thread.quit();
|
||||||
|
m_thread.wait();
|
||||||
|
qDebug() << __func__ << ": Stopped thread";
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinCore::handleRunawayException(const std::exception *e)
|
void BitcoinCore::handleRunawayException(const std::exception *e)
|
||||||
@@ -202,7 +212,6 @@ static const char* qt_argv = "bitcoin-qt";
|
|||||||
|
|
||||||
BitcoinApplication::BitcoinApplication():
|
BitcoinApplication::BitcoinApplication():
|
||||||
QApplication(qt_argc, const_cast<char **>(&qt_argv)),
|
QApplication(qt_argc, const_cast<char **>(&qt_argv)),
|
||||||
coreThread(nullptr),
|
|
||||||
optionsModel(nullptr),
|
optionsModel(nullptr),
|
||||||
clientModel(nullptr),
|
clientModel(nullptr),
|
||||||
window(nullptr),
|
window(nullptr),
|
||||||
@@ -230,13 +239,7 @@ void BitcoinApplication::setupPlatformStyle()
|
|||||||
|
|
||||||
BitcoinApplication::~BitcoinApplication()
|
BitcoinApplication::~BitcoinApplication()
|
||||||
{
|
{
|
||||||
if(coreThread)
|
m_executor.reset();
|
||||||
{
|
|
||||||
qDebug() << __func__ << ": Stopping thread";
|
|
||||||
coreThread->quit();
|
|
||||||
coreThread->wait();
|
|
||||||
qDebug() << __func__ << ": Stopped thread";
|
|
||||||
}
|
|
||||||
|
|
||||||
delete window;
|
delete window;
|
||||||
window = nullptr;
|
window = nullptr;
|
||||||
@@ -291,22 +294,15 @@ bool BitcoinApplication::baseInitialize()
|
|||||||
|
|
||||||
void BitcoinApplication::startThread()
|
void BitcoinApplication::startThread()
|
||||||
{
|
{
|
||||||
if(coreThread)
|
assert(!m_executor);
|
||||||
return;
|
m_executor.emplace(node());
|
||||||
coreThread = new QThread(this);
|
|
||||||
BitcoinCore *executor = new BitcoinCore(node());
|
|
||||||
executor->moveToThread(coreThread);
|
|
||||||
|
|
||||||
/* communication to and from thread */
|
/* communication to and from thread */
|
||||||
connect(executor, &BitcoinCore::initializeResult, this, &BitcoinApplication::initializeResult);
|
connect(&m_executor.value(), &BitcoinCore::initializeResult, this, &BitcoinApplication::initializeResult);
|
||||||
connect(executor, &BitcoinCore::shutdownResult, this, &BitcoinApplication::shutdownResult);
|
connect(&m_executor.value(), &BitcoinCore::shutdownResult, this, &BitcoinApplication::shutdownResult);
|
||||||
connect(executor, &BitcoinCore::runawayException, this, &BitcoinApplication::handleRunawayException);
|
connect(&m_executor.value(), &BitcoinCore::runawayException, this, &BitcoinApplication::handleRunawayException);
|
||||||
connect(this, &BitcoinApplication::requestedInitialize, executor, &BitcoinCore::initialize);
|
connect(this, &BitcoinApplication::requestedInitialize, &m_executor.value(), &BitcoinCore::initialize);
|
||||||
connect(this, &BitcoinApplication::requestedShutdown, executor, &BitcoinCore::shutdown);
|
connect(this, &BitcoinApplication::requestedShutdown, &m_executor.value(), &BitcoinCore::shutdown);
|
||||||
/* make sure executor object is deleted in its own thread */
|
|
||||||
connect(coreThread, &QThread::finished, executor, &QObject::deleteLater);
|
|
||||||
|
|
||||||
coreThread->start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinApplication::parameterSetup()
|
void BitcoinApplication::parameterSetup()
|
||||||
@@ -339,7 +335,6 @@ void BitcoinApplication::requestShutdown()
|
|||||||
shutdownWindow.reset(ShutdownWindow::showShutdownWindow(window));
|
shutdownWindow.reset(ShutdownWindow::showShutdownWindow(window));
|
||||||
|
|
||||||
qDebug() << __func__ << ": Requesting shutdown";
|
qDebug() << __func__ << ": Requesting shutdown";
|
||||||
startThread();
|
|
||||||
window->hide();
|
window->hide();
|
||||||
// Must disconnect node signals otherwise current thread can deadlock since
|
// Must disconnect node signals otherwise current thread can deadlock since
|
||||||
// no event loop is running.
|
// no event loop is running.
|
||||||
|
|||||||
@@ -9,11 +9,14 @@
|
|||||||
#include <config/bitcoin-config.h>
|
#include <config/bitcoin-config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QApplication>
|
#include <interfaces/node.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#include <interfaces/node.h>
|
#include <QApplication>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
class BitcoinGUI;
|
class BitcoinGUI;
|
||||||
class ClientModel;
|
class ClientModel;
|
||||||
@@ -34,6 +37,7 @@ class BitcoinCore: public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit BitcoinCore(interfaces::Node& node);
|
explicit BitcoinCore(interfaces::Node& node);
|
||||||
|
~BitcoinCore();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void initialize();
|
void initialize();
|
||||||
@@ -49,6 +53,7 @@ private:
|
|||||||
void handleRunawayException(const std::exception *e);
|
void handleRunawayException(const std::exception *e);
|
||||||
|
|
||||||
interfaces::Node& m_node;
|
interfaces::Node& m_node;
|
||||||
|
QThread m_thread;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Main Bitcoin application object */
|
/** Main Bitcoin application object */
|
||||||
@@ -112,7 +117,7 @@ Q_SIGNALS:
|
|||||||
void windowShown(BitcoinGUI* window);
|
void windowShown(BitcoinGUI* window);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QThread *coreThread;
|
std::optional<BitcoinCore> m_executor;
|
||||||
OptionsModel *optionsModel;
|
OptionsModel *optionsModel;
|
||||||
ClientModel *clientModel;
|
ClientModel *clientModel;
|
||||||
BitcoinGUI *window;
|
BitcoinGUI *window;
|
||||||
|
|||||||
Reference in New Issue
Block a user