Own threadpool for feed downloader.

This commit is contained in:
Martin Rotter 2016-08-23 11:00:37 +02:00
parent f1532fc5a5
commit 61f3ab955c
2 changed files with 9 additions and 2 deletions

View File

@ -26,9 +26,11 @@
FeedDownloader::FeedDownloader(QObject *parent) FeedDownloader::FeedDownloader(QObject *parent)
: QObject(parent), m_results(FeedDownloadResults()), m_feedsUpdated(0), m_feedsToUpdate(0), : QObject(parent), m_threadPool(new QThreadPool(this)), m_results(FeedDownloadResults()), m_feedsUpdated(0), m_feedsToUpdate(0),
m_feedsUpdating(0), m_feedsTotalCount(0), m_stopUpdate(false) { m_feedsUpdating(0), m_feedsTotalCount(0), m_stopUpdate(false) {
qRegisterMetaType<FeedDownloadResults>("FeedDownloadResults"); qRegisterMetaType<FeedDownloadResults>("FeedDownloadResults");
m_threadPool->setMaxThreadCount(6);
} }
FeedDownloader::~FeedDownloader() { FeedDownloader::~FeedDownloader() {
@ -80,7 +82,7 @@ void FeedDownloader::updateFeeds(const QList<Feed*> &feeds) {
connect(feeds.at(i), &Feed::messagesObtained, this, &FeedDownloader::oneFeedUpdateFinished, connect(feeds.at(i), &Feed::messagesObtained, this, &FeedDownloader::oneFeedUpdateFinished,
(Qt::ConnectionType) (Qt::UniqueConnection | Qt::AutoConnection)); (Qt::ConnectionType) (Qt::UniqueConnection | Qt::AutoConnection));
QThreadPool::globalInstance()->start(feeds.at(i)); m_threadPool->start(feeds.at(i));
m_feedsUpdating++; m_feedsUpdating++;
m_feedsToUpdate--; m_feedsToUpdate--;
@ -88,6 +90,9 @@ void FeedDownloader::updateFeeds(const QList<Feed*> &feeds) {
} }
void FeedDownloader::stopRunningUpdate() { void FeedDownloader::stopRunningUpdate() {
m_threadPool->clear();
// We want indicate that no more feeds will be updated in this queue.
m_stopUpdate = true; m_stopUpdate = true;
} }

View File

@ -26,6 +26,7 @@
class Feed; class Feed;
class QThreadPool;
// Represents results of batch feed updates. // Represents results of batch feed updates.
class FeedDownloadResults { class FeedDownloadResults {
@ -88,6 +89,7 @@ class FeedDownloader : public QObject {
private: private:
void finalizeUpdate(); void finalizeUpdate();
QThreadPool *m_threadPool;
FeedDownloadResults m_results; FeedDownloadResults m_results;
int m_feedsUpdated; int m_feedsUpdated;