waiting the end of worker thread correctly

preferencesAboutTextFull
-f 11 years ago
parent c053c7a2f1
commit ccf7532af8
  1. 16
      src/core/UBPersistenceManager.cpp
  2. 2
      src/core/UBPersistenceManager.h

@ -65,6 +65,7 @@ UBPersistenceManager * UBPersistenceManager::sSingleton = 0;
UBPersistenceManager::UBPersistenceManager(QObject *pParent)
: QObject(pParent)
, mHasPurgedDocuments(false)
, mIsWorkerFinished(false)
{
mDocumentSubDirectories << imageDirectory;
@ -81,6 +82,7 @@ UBPersistenceManager::UBPersistenceManager(QObject *pParent)
connect(mWorker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
connect(mThread, SIGNAL(started()), mWorker, SLOT(process()));
connect(mWorker, SIGNAL(finished()), mThread, SLOT(quit()));
connect(mWorker, SIGNAL(finished()), this, SLOT(onWorkerFinished()));
connect(mWorker, SIGNAL(finished()), mWorker, SLOT(deleteLater()));
connect(mThread, SIGNAL(finished()), mThread, SLOT(deleteLater()));
connect(mWorker,SIGNAL(sceneLoaded(QByteArray,UBDocumentProxy*,int)),this,SLOT(onSceneLoaded(QByteArray,UBDocumentProxy*,int)));
@ -105,11 +107,24 @@ void UBPersistenceManager::destroy()
sSingleton = NULL;
}
void UBPersistenceManager::onWorkerFinished()
{
mIsWorkerFinished = true;
}
UBPersistenceManager::~UBPersistenceManager()
{
if(mWorker)
mWorker->applicationWillClose();
QTime time;
time.start();
qDebug() << "start waiting";
while(!mIsWorkerFinished)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
qDebug() << "stop waiting after " << time.elapsed() << " ms";
foreach(QPointer<UBDocumentProxy> proxyGuard, documentProxies)
{
if (!proxyGuard.isNull())
@ -117,7 +132,6 @@ UBPersistenceManager::~UBPersistenceManager()
}
// to be sure that all the scenes are stored on disk
mThread->wait(10*1000);
}
void UBPersistenceManager::errorString(QString error)

@ -153,11 +153,13 @@ class UBPersistenceManager : public QObject
UBPersistenceWorker* mWorker;
QThread* mThread;
bool mIsWorkerFinished;
private slots:
void documentRepositoryChanged(const QString& path);
void errorString(QString error);
void onSceneLoaded(QByteArray,UBDocumentProxy*,int);
void onWorkerFinished();
};

Loading…
Cancel
Save