summaryrefslogtreecommitdiffstats
path: root/smdirwatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'smdirwatcher.cpp')
-rw-r--r--smdirwatcher.cpp18
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){