diff --git a/imageringlist.cpp b/imageringlist.cpp index e64af1d..071d5b7 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -22,13 +22,13 @@ Image::Image(const QString name, int number, ImageRingList *ringList) : { } -void Image::load() +void Image::load(QThreadPool *pool) { if(!m_rawImage && !m_loading) { m_loading = true; m_released = false; - QThreadPool::globalInstance()->start(new LoadRunable(m_name, this, m_ringList->analyzeLevel())); + pool->start(new LoadRunable(m_name, this, m_ringList->analyzeLevel())); } if(!m_loading && m_rawImage) emit pixmapLoaded(this); @@ -110,7 +110,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter, { connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString))); m_nameFilter.replaceInStrings(QRegularExpression("^"), "*."); + m_loadPool = new QThreadPool(this); + m_loadPool->setThreadPriority(QThread::LowPriority); m_thumbPool = new QThreadPool(this); + m_thumbPool->setThreadPriority(QThread::LowPriority); m_slideShowTimer = new QTimer(this); connect(m_slideShowTimer, &QTimer::timeout, this, static_cast(&ImageRingList::increment)); @@ -123,10 +126,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter, ImageRingList::~ImageRingList() { - QThreadPool::globalInstance()->clear(); + m_loadPool->clear(); m_thumbPool->clear(); - QThreadPool::globalInstance()->waitForDone(); + m_loadPool->waitForDone(); m_thumbPool->waitForDone(); } @@ -199,9 +202,9 @@ void ImageRingList::increment() (*m_firstImage)->release(); m_firstImage = increment(m_firstImage); m_currImage = increment(m_currImage); - (*m_currImage)->load(); + (*m_currImage)->load(m_loadPool); m_lastImage = increment(m_lastImage); - (*m_lastImage)->load(); + (*m_lastImage)->load(m_loadPool); } } @@ -212,9 +215,9 @@ void ImageRingList::decrement() (*m_lastImage)->release(); m_firstImage = decrement(m_firstImage); m_currImage = decrement(m_currImage); - (*m_currImage)->load(); + (*m_currImage)->load(m_loadPool); m_lastImage = decrement(m_lastImage); - (*m_firstImage)->load(); + (*m_firstImage)->load(m_loadPool); } } @@ -268,7 +271,7 @@ void ImageRingList::loadFile(int row) if(m_images.empty()) return; - (*m_currImage)->load(); + (*m_currImage)->load(m_loadPool); m_width = DEFAULT_WIDTHload(); + (*m_firstImage)->load(m_loadPool); m_lastImage = increment(m_lastImage); - (*m_lastImage)->load(); + (*m_lastImage)->load(m_loadPool); } if(m_lastImage != m_firstImage) { @@ -403,9 +406,9 @@ void ImageRingList::setPreload(int width) for(int i = newWidth - m_width; i>0; i--) { m_firstImage = decrement(m_firstImage); - (*m_firstImage)->load(); + (*m_firstImage)->load(m_loadPool); m_lastImage = increment(m_lastImage); - (*m_lastImage)->load(); + (*m_lastImage)->load(m_loadPool); } } if(newWidth < m_width) @@ -460,9 +463,9 @@ void ImageRingList::toggleSlideshow(bool start) void ImageRingList::setFiles(const QStringList files, const QString ¤tFile) { - QThreadPool::globalInstance()->clear(); + m_loadPool->clear(); m_thumbPool->clear(); - QThreadPool::globalInstance()->waitForDone(); + m_loadPool->waitForDone(); m_thumbPool->waitForDone(); beginResetModel(); m_images.clear(); diff --git a/imageringlist.h b/imageringlist.h index aa7d347..b835fe5 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -27,7 +27,7 @@ class Image : public QObject ImageRingList *m_ringList; public: explicit Image(const QString name, int number, ImageRingList *ringList); - void load(); + void load(QThreadPool *pool); void loadThumbnail(QThreadPool *pool); void release(); QString name() const; @@ -62,6 +62,7 @@ class ImageRingList : public QAbstractItemModel QDir::SortFlag m_sort = QDir::Name; bool m_reversed = false; AnalyzeLevel m_analyzeLevel; + QThreadPool *m_loadPool; QThreadPool *m_thumbPool; Database *m_database; QStringList m_nameFilter; diff --git a/scriptengine.cpp b/scriptengine.cpp index 252d6f1..666e949 100644 --- a/scriptengine.cpp +++ b/scriptengine.cpp @@ -29,6 +29,7 @@ ScriptEngine::ScriptEngine(BatchProcessing *parent) _jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject); _database->init(QLatin1String("scriptengine")); _semaphore.release(_pool->maxThreadCount()); + _pool->setThreadPriority(QThread::LowPriority); #ifdef PLATESOLVER _solver = new Solver(this);