diff options
author | Arno <am@disconnect.de> | 2010-11-05 15:20:44 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-11-05 15:20:44 +0100 |
commit | 8230ea0228bd300316529c852858f7105ee75a3d (patch) | |
tree | 3ce0da30007449722bb233cb22b309e25ed13eec | |
parent | b8a793f4a1afcd27cf03da7b620dd7a4f7f5813f (diff) | |
download | SheMov-8230ea0228bd300316529c852858f7105ee75a3d.tar.gz SheMov-8230ea0228bd300316529c852858f7105ee75a3d.tar.bz2 SheMov-8230ea0228bd300316529c852858f7105ee75a3d.zip |
Let ConsistencyChecker run in QThread
Until now ConsistencyChecker ran in the GUI-Thread. According to the
docs the event loop of the QThread needs to be started to run something
in the thread. So use a QTimer::singleShot() to start the check
function.
-rw-r--r-- | consistencycheck.cpp | 52 | ||||
-rw-r--r-- | consistencycheck.h | 10 |
2 files changed, 39 insertions, 23 deletions
diff --git a/consistencycheck.cpp b/consistencycheck.cpp index b281942..7e02304 100644 --- a/consistencycheck.cpp +++ b/consistencycheck.cpp @@ -20,8 +20,7 @@ #include <QBrush> #include <QTextBlock> #include <QCheckBox> - -#include <QDebug> +#include <QTimer> #include "consistencycheck.h" #include "helper.h" @@ -31,7 +30,7 @@ ConsistencyCheck::ConsistencyCheck(QWidget *parent, Qt::WindowFlags f) : QDialog mCheckLabel = new QLabel(tr("Checking database consistency")); mDisplay = new QPlainTextEdit; mDisplay->setReadOnly(true); - mCancelExit = new QPushButton(tr("Cancel")); + mCancelExit = new QPushButton(tr("Close")); mCheckDb = new QPushButton(tr("Check database")); mCheckFs = new QPushButton(tr("Check Filesystem")); mErrorsOnly = new QCheckBox(tr("Show only errors")); @@ -41,7 +40,7 @@ ConsistencyCheck::ConsistencyCheck(QWidget *parent, Qt::WindowFlags f) : QDialog buttonLayout->addWidget(mCheckFs); buttonLayout->addStretch(); buttonLayout->addWidget(mCancelExit); - connect(mCancelExit, SIGNAL(clicked()), this, SLOT(cancelExit())); + connect(mCancelExit, SIGNAL(clicked()), this, SLOT(accept())); // signal mapper QSignalMapper *mapper = new QSignalMapper(this); @@ -51,6 +50,11 @@ ConsistencyCheck::ConsistencyCheck(QWidget *parent, Qt::WindowFlags f) : QDialog mapper->setMapping(mCheckFs, ConsistencyCheck::FsCheck); connect(mapper, SIGNAL(mapped(int)), this, SLOT(startChecker(int))); + //misc + mChecker = new ConsistencyChecker(this); + connect(mChecker, SIGNAL(started()), this, SLOT(checkerStarted())); + connect(mChecker, SIGNAL(finished()), this, SLOT(checkerFinished())); + // main layout QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mCheckLabel); @@ -62,7 +66,6 @@ ConsistencyCheck::ConsistencyCheck(QWidget *parent, Qt::WindowFlags f) : QDialog } void ConsistencyCheck::startChecker(int checkerType){ - mChecker = new ConsistencyChecker; if(mChecker->status() == ConsistencyChecker::Fail){ return; } @@ -96,14 +99,25 @@ void ConsistencyCheck::addMessage(const QString &message){ cursor.insertText(message); } -void ConsistencyCheck::cancelExit(){ - if(mChecker->isRunning()){ - mChecker->cancel(true); - mCancelExit->setText(tr("Close")); - connect(mCancelExit, SIGNAL(clicked()), this, SLOT(accept())); - }else{ - close(); - } +void ConsistencyCheck::checkerStarted(){ + mCheckDb->setEnabled(false); + mCheckFs->setEnabled(false); + mCancelExit->setText(tr("Cancel")); + mCancelExit->disconnect(); + connect(mCancelExit, SIGNAL(clicked()), this, SLOT(cancelChecker())); +} + +void ConsistencyCheck::checkerFinished(){ + mCheckDb->setEnabled(true); + mCheckFs->setEnabled(true); + mCancelExit->setText(tr("Close")); + mCancelExit->disconnect(); + connect(mCancelExit, SIGNAL(clicked()), this, SLOT(accept())); + mChecker->setCancel(false); +} + +void ConsistencyCheck::cancelChecker(){ + mChecker->setCancel(true); } void ConsistencyCheck::showErrorsChanged(int state){ @@ -111,7 +125,6 @@ void ConsistencyCheck::showErrorsChanged(int state){ for(QTextBlock it = doc->begin(); it != doc->end(); it = it.next()){ if(it.text().startsWith("OK")){ if(state == Qt::Checked){ - qDebug() << it.text(); it.setVisible(false); }else{ it.setVisible(true); @@ -134,12 +147,9 @@ void ConsistencyChecker::check(){ } } -void ConsistencyChecker::cancel(bool cancel){ - if(!cancel){ - return; - } +void ConsistencyChecker::setCancel(bool cancel){ QMutexLocker locker(&mCancelMutex); - mCanceled = true; + mCanceled = cancel; } ConsistencyChecker::~ConsistencyChecker(){ @@ -149,7 +159,8 @@ ConsistencyChecker::~ConsistencyChecker(){ void ConsistencyChecker::run(){ switch(mMode){ case ConsistencyCheck::DbCheck: - dbCheck(); + QTimer::singleShot(0, this, SLOT(dbCheck())); + exec(); break; default: ; @@ -187,6 +198,7 @@ void ConsistencyChecker::dbCheck(){ } } } + quit(); } QString ConsistencyChecker::archivePath(const QString &fileName, const QString &md5sum) const { diff --git a/consistencycheck.h b/consistencycheck.h index 49b9a8e..2f934fc 100644 --- a/consistencycheck.h +++ b/consistencycheck.h @@ -29,7 +29,9 @@ class ConsistencyCheck : public QDialog { private slots: void startChecker(int checkerType); void addMessage(const QString &message); - void cancelExit(); + void checkerStarted(); + void checkerFinished(); + void cancelChecker(); void showErrorsChanged(int state); private: @@ -55,7 +57,10 @@ class ConsistencyChecker : public QThread { void check(); public slots: - void cancel(bool cancel); + void setCancel(bool cancel); + + private slots: + void dbCheck(); signals: void consistencyMsg(const QString &msg); @@ -64,7 +69,6 @@ class ConsistencyChecker : public QThread { void run(); private: - void dbCheck(); QString archivePath(const QString &fileName, const QString &md5sum) const; bool mCanceled; int mMode; |