|
|
|
@ -138,6 +138,24 @@ public:
|
|
|
|
|
QMetaObject::invokeMethod( m_queue, "finish", Qt::QueuedConnection );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @brief The names of the queued (not running!) jobs.
|
|
|
|
|
*/
|
|
|
|
|
QStringList queuedJobs() const
|
|
|
|
|
{
|
|
|
|
|
QMutexLocker qlock( &m_enqueMutex );
|
|
|
|
|
QStringList l;
|
|
|
|
|
l.reserve( m_queuedJobs->count() );
|
|
|
|
|
for ( const auto& j : *m_queuedJobs )
|
|
|
|
|
{
|
|
|
|
|
l << j.job->prettyName();
|
|
|
|
|
}
|
|
|
|
|
return l;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
/* This is called **only** from run(), while m_runMutex is
|
|
|
|
|
* already locked, so we can use the m_runningJobs member safely.
|
|
|
|
|
*/
|
|
|
|
|
void emitProgress( qreal percentage ) const
|
|
|
|
|
{
|
|
|
|
|
percentage = qBound( 0.0, percentage, 1.0 );
|
|
|
|
@ -159,10 +177,8 @@ public:
|
|
|
|
|
m_queue, "progress", Qt::QueuedConnection, Q_ARG( qreal, progress ), Q_ARG( QString, message ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QMutex m_runMutex;
|
|
|
|
|
QMutex m_enqueMutex;
|
|
|
|
|
mutable QMutex m_runMutex;
|
|
|
|
|
mutable QMutex m_enqueMutex;
|
|
|
|
|
|
|
|
|
|
std::unique_ptr< WeightedJobList > m_runningJobs = std::make_unique< WeightedJobList >();
|
|
|
|
|
std::unique_ptr< WeightedJobList > m_queuedJobs = std::make_unique< WeightedJobList >();
|
|
|
|
@ -229,7 +245,7 @@ JobQueue::enqueue( int moduleWeight, const JobList& jobs )
|
|
|
|
|
{
|
|
|
|
|
Q_ASSERT( !m_thread->isRunning() );
|
|
|
|
|
m_thread->enqueue( moduleWeight, jobs );
|
|
|
|
|
emit queueChanged( jobs ); // FIXME: bogus
|
|
|
|
|
emit queueChanged( m_thread->queuedJobs() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
@ -237,6 +253,7 @@ JobQueue::finish()
|
|
|
|
|
{
|
|
|
|
|
m_finished = true;
|
|
|
|
|
emit finished();
|
|
|
|
|
emit queueChanged( m_thread->queuedJobs() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GlobalStorage*
|
|
|
|
|