summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventloop.cpp
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2012-02-08 15:55:29 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-23 15:07:58 +0100
commitb067f6cfe30a5a687316130d04678ac406837d09 (patch)
treed23e2377d7e2b96ffc64e27389edac6a121b46c7 /src/corelib/kernel/qeventloop.cpp
parent422b6ba9ecf0595da5772afec8c5a0a00983d95d (diff)
Add the quitlock feature to QThread.
Change-Id: Ib44ee9739499ba4c5f0fecbef3976251ea22836d Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qeventloop.cpp')
-rw-r--r--src/corelib/kernel/qeventloop.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index 8b0ec85679..2fb351797c 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -322,13 +322,19 @@ class QEventLoopLockerPrivate
{
public:
explicit QEventLoopLockerPrivate(QEventLoopPrivate *loop)
- : loop(loop), app(0)
+ : loop(loop), thread(0), app(0)
{
loop->ref();
}
+ explicit QEventLoopLockerPrivate(QThreadPrivate *thread)
+ : loop(0), thread(thread), app(0)
+ {
+ thread->ref();
+ }
+
explicit QEventLoopLockerPrivate(QCoreApplicationPrivate *app)
- : loop(0), app(app)
+ : loop(0), thread(0), app(app)
{
app->ref();
}
@@ -337,12 +343,15 @@ public:
{
if (loop)
loop->deref();
+ else if (thread)
+ thread->deref();
else
app->deref();
}
private:
QEventLoopPrivate *loop;
+ QThreadPrivate *thread;
QCoreApplicationPrivate *app;
};
@@ -390,6 +399,12 @@ QEventLoopLocker::QEventLoopLocker(QEventLoop *loop)
}
+QEventLoopLocker::QEventLoopLocker(QThread *thread)
+ : d_ptr(new QEventLoopLockerPrivate(static_cast<QThreadPrivate*>(QObjectPrivate::get(thread))))
+{
+
+}
+
/*!
Destroys this event loop locker object
*/