diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-10 19:54:13 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-10 19:54:13 +0000 |
commit | da7847adb43726079c7a4be1f06acbebe0bdde57 (patch) | |
tree | 0138139a2d4a3a213319cc5e23e409b90a9fcc6b /src/sources/threadedtrigger.cpp | |
download | kima-da7847adb43726079c7a4be1f06acbebe0bdde57.tar.gz kima-da7847adb43726079c7a4be1f06acbebe0bdde57.zip |
Added old abandoned KDE3 version of Kima
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kima@1088422 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/sources/threadedtrigger.cpp')
-rw-r--r-- | src/sources/threadedtrigger.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/sources/threadedtrigger.cpp b/src/sources/threadedtrigger.cpp new file mode 100644 index 0000000..11f07b5 --- /dev/null +++ b/src/sources/threadedtrigger.cpp @@ -0,0 +1,67 @@ +/*************************************************************************** + * Copyright (C) 2007 by Ken Werner * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ + +#include "threadedtrigger.h" +#include <qapplication.h> + +//#include "kdebug.h" + +ThreadedTrigger::ThreadedTrigger(TriggeredSource* inSource, unsigned long inRefreshSleep): + mSource(inSource), + mRefreshSleep(inRefreshSleep), + mRunning(false) + { + connect(mSource, SIGNAL(enabledChanged(bool, Source*)), this, SLOT(enable(bool))); +} + +ThreadedTrigger::~ThreadedTrigger(){ + enable(false); +} + +void ThreadedTrigger::enable(bool inEnable){ + if(inEnable && !mRunning){ // start this thread (calls run()) + //kdDebug() << "start thread " << mSource->getName() << endl; + // start the thread + mRunning = true; + this->start(QThread::LowPriority); + }else if(!inEnable && mRunning){ // stops the thread + //kdDebug() << "stop thread " << mSource->getName() << endl; + mRunning = false; + mWaitMutex.lock(); + mWaitCond.wakeOne(); + mWaitMutex.unlock(); + this->wait(); + } +} + +void ThreadedTrigger::run(){ + mWaitMutex.lock(); + while( mRunning ) { + QString text = mSource->fetchValue(); + UpdateEvent* ue = new UpdateEvent(text); // Qt will delete the ue when done + QApplication::postEvent(mSource, ue); // send the event to the TriggeredSource + if(mWaitCond.wait(&mWaitMutex, mRefreshSleep)) + break; // we were woken up + } + // if we are here, the mutex must be locked: + // 1. QWaitCondition::wait locks it when it returns + // 2. mWaitMutex is locked when we enter the loop + mWaitMutex.unlock(); // unlock it again +} |