From 1649f3038907174305a9e150c5c6ab92aa9e176a Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 15 Aug 2025 02:11:39 -0300 Subject: [PATCH] [PictureLoader] Use thread pool instead of creating new thread (#6072) * delete threads * Run reply processing in thread pool --- .../picture_loader/picture_loader_worker.cpp | 2 +- .../picture_loader_worker_work.cpp | 21 ++++++++++--------- .../picture_loader_worker_work.h | 4 ++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/cockatrice/src/client/ui/picture_loader/picture_loader_worker.cpp b/cockatrice/src/client/ui/picture_loader/picture_loader_worker.cpp index 26cf09156..ff3b5fcbb 100644 --- a/cockatrice/src/client/ui/picture_loader/picture_loader_worker.cpp +++ b/cockatrice/src/client/ui/picture_loader/picture_loader_worker.cpp @@ -94,7 +94,7 @@ QNetworkReply *PictureLoaderWorker::makeRequest(const QUrl &url, PictureLoaderWo QNetworkReply *reply = networkManager->get(req); // Connect reply handling - connect(reply, &QNetworkReply::finished, worker, [reply, worker] { worker->handleNetworkReply(reply); }); + connect(reply, &QNetworkReply::finished, worker, [reply, worker] { worker->acceptNetworkReply(reply); }); return reply; } diff --git a/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.cpp b/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.cpp index 1e7600a75..f8af2a001 100644 --- a/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.cpp +++ b/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.cpp @@ -11,6 +11,7 @@ #include #include #include +#include // Card back returned by gatherer when card is not found static const QStringList MD5_BLACKLIST = {"db0c48db407a907c16ade38de048a441"}; @@ -28,16 +29,7 @@ PictureLoaderWorkerWork::PictureLoaderWorkerWork(const PictureLoaderWorker *work // Hook up signals to settings connect(&SettingsCache::instance(), SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged())); - pictureLoaderThread = new QThread; - moveToThread(pictureLoaderThread); - - connect(pictureLoaderThread, &QThread::started, this, &PictureLoaderWorkerWork::startNextPicDownload); - - // clean up threads once loading finishes - connect(this, &QObject::destroyed, pictureLoaderThread, &QThread::quit); - connect(pictureLoaderThread, &QThread::finished, pictureLoaderThread, &QObject::deleteLater); - - pictureLoaderThread->start(QThread::LowPriority); + startNextPicDownload(); } void PictureLoaderWorkerWork::startNextPicDownload() @@ -78,6 +70,15 @@ void PictureLoaderWorkerWork::picDownloadFailed() } } +/** + * Processes the reply in another thread. + * @param reply The finished reply. Takes ownership of the object + */ +void PictureLoaderWorkerWork::acceptNetworkReply(QNetworkReply *reply) +{ + QThreadPool::globalInstance()->start([this, reply] { handleNetworkReply(reply); }); +} + /** * * @param reply The reply. Takes ownership of the object diff --git a/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.h b/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.h index d03160463..87f8e5cb8 100644 --- a/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.h +++ b/cockatrice/src/client/ui/picture_loader/picture_loader_worker_work.h @@ -30,14 +30,14 @@ public: PictureToLoad cardToDownload; public slots: - void handleNetworkReply(QNetworkReply *reply); + void acceptNetworkReply(QNetworkReply *reply); private: - QThread *pictureLoaderThread; bool picDownload; void startNextPicDownload(); void picDownloadFailed(); + void handleNetworkReply(QNetworkReply *reply); void handleFailedReply(const QNetworkReply *reply); void handleSuccessfulReply(QNetworkReply *reply); QImage tryLoadImageFromReply(QNetworkReply *reply);