diff options
author | Arno <am@disconnect.de> | 2013-07-27 07:18:32 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-07-27 07:18:32 +0200 |
commit | 1b1d3a18a8fffdd61f533fd4b0bde4f75d683212 (patch) | |
tree | 51b60f6afbe4a5e1bd8617a7c18f08a30e971526 /smdirwatcher.cpp | |
parent | 8fba0fcb81e7b517804f34a5c8ad3741f92926da (diff) | |
download | SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.gz SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.bz2 SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.zip |
Cleanup closeEvent
Don't try to delete all the prepared statements manually. Get rid of the
~destructors and just close the QSqlDatabase. close() deletes all
Statements.
Also, quit() all QThreads on closeEvent() except CompleterProducer. When
the experimental archive view gets merged, that QThread is gone. No need
to bother...
Diffstat (limited to 'smdirwatcher.cpp')
-rw-r--r-- | smdirwatcher.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index a6163c2..371e7cf 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -86,7 +86,17 @@ void SmDirWatcher::run(){ } } -SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true) { +void SmDirWatcher::stop(){ + mSemFree->acquire(); + mCollector->stop(); + mSemUsed->release(); + if(mCollector->isRunning()){ + mCollector->wait(); + } + quit(); +} + +SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true), mCancel(false) { QSqlDatabase db = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "collectordb"); db.open(); mPicPresentQ = new QSqlQuery(db); @@ -109,6 +119,11 @@ void SmDataColletor::setCheckForPresent(bool present){ void SmDataColletor::run(){ forever { mSemUsed->acquire(); + if(mCancel){ + QSqlDatabase::database("collectordb").close(); + mSemFree->release(); + break; + } QPair<QString, SmDirWatcher::DWEvent> cur = mDataQueue->dequeue(); if(cur.second == SmDirWatcher::Populate){ SmTreeItem *i = populate(cur.first); @@ -123,6 +138,7 @@ void SmDataColletor::run(){ emit newData(fd, cur.second); mSemFree->release(); } + quit(); } SmTreeItem * SmDataColletor::populate(const QString &dir){ |