Do not use global thread pool
This commit is contained in:
+18
-15
@@ -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)
|
if(!m_rawImage && !m_loading)
|
||||||
{
|
{
|
||||||
m_loading = true;
|
m_loading = true;
|
||||||
m_released = false;
|
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)
|
if(!m_loading && m_rawImage)
|
||||||
emit pixmapLoaded(this);
|
emit pixmapLoaded(this);
|
||||||
@@ -110,7 +110,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter,
|
|||||||
{
|
{
|
||||||
connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString)));
|
connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString)));
|
||||||
m_nameFilter.replaceInStrings(QRegularExpression("^"), "*.");
|
m_nameFilter.replaceInStrings(QRegularExpression("^"), "*.");
|
||||||
|
m_loadPool = new QThreadPool(this);
|
||||||
|
m_loadPool->setThreadPriority(QThread::LowPriority);
|
||||||
m_thumbPool = new QThreadPool(this);
|
m_thumbPool = new QThreadPool(this);
|
||||||
|
m_thumbPool->setThreadPriority(QThread::LowPriority);
|
||||||
|
|
||||||
m_slideShowTimer = new QTimer(this);
|
m_slideShowTimer = new QTimer(this);
|
||||||
connect(m_slideShowTimer, &QTimer::timeout, this, static_cast<void (ImageRingList::*)()>(&ImageRingList::increment));
|
connect(m_slideShowTimer, &QTimer::timeout, this, static_cast<void (ImageRingList::*)()>(&ImageRingList::increment));
|
||||||
@@ -123,10 +126,10 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter,
|
|||||||
|
|
||||||
ImageRingList::~ImageRingList()
|
ImageRingList::~ImageRingList()
|
||||||
{
|
{
|
||||||
QThreadPool::globalInstance()->clear();
|
m_loadPool->clear();
|
||||||
m_thumbPool->clear();
|
m_thumbPool->clear();
|
||||||
|
|
||||||
QThreadPool::globalInstance()->waitForDone();
|
m_loadPool->waitForDone();
|
||||||
m_thumbPool->waitForDone();
|
m_thumbPool->waitForDone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,9 +202,9 @@ void ImageRingList::increment()
|
|||||||
(*m_firstImage)->release();
|
(*m_firstImage)->release();
|
||||||
m_firstImage = increment(m_firstImage);
|
m_firstImage = increment(m_firstImage);
|
||||||
m_currImage = increment(m_currImage);
|
m_currImage = increment(m_currImage);
|
||||||
(*m_currImage)->load();
|
(*m_currImage)->load(m_loadPool);
|
||||||
m_lastImage = increment(m_lastImage);
|
m_lastImage = increment(m_lastImage);
|
||||||
(*m_lastImage)->load();
|
(*m_lastImage)->load(m_loadPool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,9 +215,9 @@ void ImageRingList::decrement()
|
|||||||
(*m_lastImage)->release();
|
(*m_lastImage)->release();
|
||||||
m_firstImage = decrement(m_firstImage);
|
m_firstImage = decrement(m_firstImage);
|
||||||
m_currImage = decrement(m_currImage);
|
m_currImage = decrement(m_currImage);
|
||||||
(*m_currImage)->load();
|
(*m_currImage)->load(m_loadPool);
|
||||||
m_lastImage = decrement(m_lastImage);
|
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())
|
if(m_images.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
(*m_currImage)->load();
|
(*m_currImage)->load(m_loadPool);
|
||||||
|
|
||||||
m_width = DEFAULT_WIDTH<m_images.size()/2 ? DEFAULT_WIDTH : m_images.size()/2;
|
m_width = DEFAULT_WIDTH<m_images.size()/2 ? DEFAULT_WIDTH : m_images.size()/2;
|
||||||
if(m_liveMode)
|
if(m_liveMode)
|
||||||
@@ -277,9 +280,9 @@ void ImageRingList::loadFile(int row)
|
|||||||
for(int i=0; i<m_width; i++)
|
for(int i=0; i<m_width; i++)
|
||||||
{
|
{
|
||||||
m_firstImage = decrement(m_firstImage);
|
m_firstImage = decrement(m_firstImage);
|
||||||
(*m_firstImage)->load();
|
(*m_firstImage)->load(m_loadPool);
|
||||||
m_lastImage = increment(m_lastImage);
|
m_lastImage = increment(m_lastImage);
|
||||||
(*m_lastImage)->load();
|
(*m_lastImage)->load(m_loadPool);
|
||||||
}
|
}
|
||||||
if(m_lastImage != m_firstImage)
|
if(m_lastImage != m_firstImage)
|
||||||
{
|
{
|
||||||
@@ -403,9 +406,9 @@ void ImageRingList::setPreload(int width)
|
|||||||
for(int i = newWidth - m_width; i>0; i--)
|
for(int i = newWidth - m_width; i>0; i--)
|
||||||
{
|
{
|
||||||
m_firstImage = decrement(m_firstImage);
|
m_firstImage = decrement(m_firstImage);
|
||||||
(*m_firstImage)->load();
|
(*m_firstImage)->load(m_loadPool);
|
||||||
m_lastImage = increment(m_lastImage);
|
m_lastImage = increment(m_lastImage);
|
||||||
(*m_lastImage)->load();
|
(*m_lastImage)->load(m_loadPool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(newWidth < m_width)
|
if(newWidth < m_width)
|
||||||
@@ -460,9 +463,9 @@ void ImageRingList::toggleSlideshow(bool start)
|
|||||||
|
|
||||||
void ImageRingList::setFiles(const QStringList files, const QString ¤tFile)
|
void ImageRingList::setFiles(const QStringList files, const QString ¤tFile)
|
||||||
{
|
{
|
||||||
QThreadPool::globalInstance()->clear();
|
m_loadPool->clear();
|
||||||
m_thumbPool->clear();
|
m_thumbPool->clear();
|
||||||
QThreadPool::globalInstance()->waitForDone();
|
m_loadPool->waitForDone();
|
||||||
m_thumbPool->waitForDone();
|
m_thumbPool->waitForDone();
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
m_images.clear();
|
m_images.clear();
|
||||||
|
|||||||
+2
-1
@@ -27,7 +27,7 @@ class Image : public QObject
|
|||||||
ImageRingList *m_ringList;
|
ImageRingList *m_ringList;
|
||||||
public:
|
public:
|
||||||
explicit Image(const QString name, int number, ImageRingList *ringList);
|
explicit Image(const QString name, int number, ImageRingList *ringList);
|
||||||
void load();
|
void load(QThreadPool *pool);
|
||||||
void loadThumbnail(QThreadPool *pool);
|
void loadThumbnail(QThreadPool *pool);
|
||||||
void release();
|
void release();
|
||||||
QString name() const;
|
QString name() const;
|
||||||
@@ -62,6 +62,7 @@ class ImageRingList : public QAbstractItemModel
|
|||||||
QDir::SortFlag m_sort = QDir::Name;
|
QDir::SortFlag m_sort = QDir::Name;
|
||||||
bool m_reversed = false;
|
bool m_reversed = false;
|
||||||
AnalyzeLevel m_analyzeLevel;
|
AnalyzeLevel m_analyzeLevel;
|
||||||
|
QThreadPool *m_loadPool;
|
||||||
QThreadPool *m_thumbPool;
|
QThreadPool *m_thumbPool;
|
||||||
Database *m_database;
|
Database *m_database;
|
||||||
QStringList m_nameFilter;
|
QStringList m_nameFilter;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ ScriptEngine::ScriptEngine(BatchProcessing *parent)
|
|||||||
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
|
_jsEngine->globalObject().setProperty("FITSRecordModify", fitsRecordObject);
|
||||||
_database->init(QLatin1String("scriptengine"));
|
_database->init(QLatin1String("scriptengine"));
|
||||||
_semaphore.release(_pool->maxThreadCount());
|
_semaphore.release(_pool->maxThreadCount());
|
||||||
|
_pool->setThreadPriority(QThread::LowPriority);
|
||||||
|
|
||||||
#ifdef PLATESOLVER
|
#ifdef PLATESOLVER
|
||||||
_solver = new Solver(this);
|
_solver = new Solver(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user