diff options
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){ |