summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/changes-5.0.02
-rw-r--r--src/corelib/thread/qthread.cpp27
-rw-r--r--src/corelib/thread/qthread.h1
-rw-r--r--src/corelib/thread/qthread_p.h1
-rw-r--r--src/corelib/thread/qthread_unix.cpp7
-rw-r--r--src/corelib/thread/qthread_win.cpp10
-rw-r--r--tests/auto/corelib/thread/qthread/tst_qthread.cpp4
7 files changed, 13 insertions, 39 deletions
diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0
index 834b62edbe..5c9d5147c4 100644
--- a/dist/changes-5.0.0
+++ b/dist/changes-5.0.0
@@ -323,6 +323,8 @@ information about a particular change.
- QAbstractPageSetupDialog has been removed.
+- QThread::terminated() has been removed, since its emission cannot be guaranteed.
+
****************************************************************************
* General *
****************************************************************************
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index 72bae48eba..465f2befbc 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -144,7 +144,7 @@ void QAdoptedThread::run()
*/
QThreadPrivate::QThreadPrivate(QThreadData *d)
- : QObjectPrivate(), running(false), finished(false), terminated(false),
+ : QObjectPrivate(), running(false), finished(false),
isInFinish(false), exited(false), returnCode(-1),
stackSize(0), priority(QThread::InheritPriority), data(d)
{
@@ -203,10 +203,9 @@ QThreadPrivate::~QThreadPrivate()
\section1 Managing threads
- QThread will notifiy you via a signal
- when the thread is started(), finished(), and terminated(), or
- you can use isFinished() and isRunning() to query the state of
- the thread.
+ QThread will notifiy you via a signal when the thread is
+ started() and finished(), or you can use isFinished() and
+ isRunning() to query the state of the thread.
You can stop the thread by calling exit() or quit(). In extreme
cases, you may want to forcibly terminate() an executing thread.
@@ -326,7 +325,7 @@ QThreadPrivate::~QThreadPrivate()
This signal is emitted from the associated thread when it starts executing,
before the run() function is called.
- \sa finished(), terminated()
+ \sa finished()
*/
/*!
@@ -341,17 +340,7 @@ QThreadPrivate::~QThreadPrivate()
\note If the associated thread was terminated using terminate(), it is undefined from
which thread this signal is emitted.
- \sa started(), terminated()
-*/
-
-/*!
- \fn void QThread::terminated()
-
- This signal is emitted when the thread is terminated.
-
- It is undefined from which thread this signal is emitted.
-
- \sa started(), finished()
+ \sa started()
*/
/*!
@@ -656,8 +645,8 @@ QThread::Priority QThread::priority() const
Terminates the execution of the thread. The thread may or may not
be terminated immediately, depending on the operating system's
- scheduling policies. Listen for the terminated() signal, or use
- QThread::wait() after terminate(), to be sure.
+ scheduling policies. Use QThread::wait() after terminate(), to be
+ sure.
When the thread is terminated, all threads waiting for the thread
to finish will be woken up.
diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h
index 0fab71d5c1..8fda4513e6 100644
--- a/src/corelib/thread/qthread.h
+++ b/src/corelib/thread/qthread.h
@@ -113,7 +113,6 @@ public:
Q_SIGNALS:
void started();
void finished();
- void terminated();
protected:
virtual void run();
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index 268891d5e8..ec89eed098 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -147,7 +147,6 @@ public:
bool running;
bool finished;
- bool terminated;
bool isInFinish; //when in QThreadPrivate::finish
bool exited;
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 7fd89f4bca..2213b8f71a 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -346,16 +346,12 @@ void QThreadPrivate::finish(void *arg)
d->isInFinish = true;
d->priority = QThread::InheritPriority;
- bool terminated = d->terminated;
void *data = &d->data->tls;
locker.unlock();
- if (terminated)
- emit thr->terminated();
emit thr->finished();
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QThreadStorageData::finish((void **)data);
locker.relock();
- d->terminated = false;
QAbstractEventDispatcher *eventDispatcher = d->data->eventDispatcher;
if (eventDispatcher) {
@@ -523,7 +519,6 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
- d->terminated = false;
d->returnCode = 0;
d->exited = false;
@@ -631,8 +626,6 @@ void QThread::terminate()
if (code) {
qWarning("QThread::start: Thread termination error: %s",
qPrintable(qt_error_string((code))));
- } else {
- d->terminated = true;
}
#endif
}
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index b487efffad..56e58fbcc3 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -352,18 +352,13 @@ void QThreadPrivate::finish(void *arg, bool lockAnyway)
QMutexLocker locker(lockAnyway ? &d->mutex : 0);
d->isInFinish = true;
d->priority = QThread::InheritPriority;
- bool terminated = d->terminated;
void **tls_data = reinterpret_cast<void **>(&d->data->tls);
locker.unlock();
- if (terminated)
- emit thr->terminated();
emit thr->finished();
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QThreadStorageData::finish(tls_data);
locker.relock();
- d->terminated = false;
-
QAbstractEventDispatcher *eventDispatcher = d->data->eventDispatcher;
if (eventDispatcher) {
d->data->eventDispatcher = 0;
@@ -443,7 +438,6 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
- d->terminated = false;
d->exited = false;
d->returnCode = 0;
@@ -524,7 +518,6 @@ void QThread::terminate()
return;
}
TerminateThread(d->handle, 0);
- d->terminated = true;
QThreadPrivate::finish(this, false);
}
@@ -562,7 +555,7 @@ bool QThread::wait(unsigned long time)
if (ret && !d->finished) {
// thread was terminated by someone else
- d->terminated = true;
+
QThreadPrivate::finish(this, false);
}
@@ -583,7 +576,6 @@ void QThread::setTerminationEnabled(bool enabled)
QMutexLocker locker(&d->mutex);
d->terminationEnabled = enabled;
if (enabled && d->terminatePending) {
- d->terminated = true;
QThreadPrivate::finish(thr, false);
locker.unlock(); // don't leave the mutex locked!
_endthreadex(0);
diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
index d7b810858d..bdfb980357 100644
--- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp
+++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
@@ -77,7 +77,7 @@ private slots:
void quit();
void started();
void finished();
- void terminated();
+ void terminated(); // Named after a signal that was removed in Qt 5.0
void exec();
void sleep();
void msleep();
@@ -535,7 +535,7 @@ void tst_QThread::terminated()
{
SignalRecorder recorder;
Terminate_Thread thread;
- connect(&thread, SIGNAL(terminated()), &recorder, SLOT(slot()), Qt::DirectConnection);
+ connect(&thread, SIGNAL(finished()), &recorder, SLOT(slot()), Qt::DirectConnection);
{
QMutexLocker locker(&thread.mutex);
thread.start();