refs #439 CWorkerBase::waitForFinished().

This commit is contained in:
Mathew Sutcliffe
2015-06-01 23:31:57 +01:00
parent d8091df47d
commit 17c1742bec
2 changed files with 18 additions and 0 deletions

View File

@@ -8,6 +8,7 @@
*/
#include "worker.h"
#include <QWaitCondition>
namespace BlackMisc
{
@@ -40,6 +41,19 @@ namespace BlackMisc
QMetaObject::invokeMethod(this, "deleteLater");
}
void CWorkerBase::waitForFinished()
{
QMutex mutex;
QMutexLocker waitCondLock(&mutex);
QWaitCondition waitCond;
{
QMutexLocker finishedLock(&m_finishedMutex);
if (m_finished) { return; }
then([ & ] { mutex.lock(); mutex.unlock(); waitCond.wakeAll(); });
}
waitCond.wait(&mutex);
}
void CContinuousWorker::start(QThread::Priority priority)
{
if (m_name.isEmpty()) { m_name = metaObject()->className(); }

View File

@@ -164,6 +164,10 @@ namespace BlackMisc
if (m_finished) { ifFunctor(); } else { elseFunctor(); }
}
//! Blocks until the task is finished.
//! \threadsafe
void waitForFinished();
signals:
//! Emitted when the task is finished.
void finished();