Commit ccf7532a authored by -f's avatar -f

waiting the end of worker thread correctly

parent c053c7a2
......@@ -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();
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment