summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/thread
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/thread')
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp25
-rw-r--r--tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp5
2 files changed, 26 insertions, 4 deletions
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index c1b562e7f4..e6f6827f3f 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -144,6 +144,7 @@ private slots:
void takeResultWorksForTypesWithoutDefaultCtor();
void canceledFutureIsNotValid();
void signalConnect();
+ void waitForFinished();
private:
using size_type = std::vector<int>::size_type;
@@ -3076,5 +3077,29 @@ void tst_QFuture::signalConnect()
}
}
+void tst_QFuture::waitForFinished()
+{
+ QFutureInterface<void> fi;
+ auto future = fi.future();
+
+ QScopedPointer<QThread> waitingThread (QThread::create([&] {
+ future.waitForFinished();
+ }));
+
+ waitingThread->start();
+
+ QVERIFY(!waitingThread->wait(200));
+ QVERIFY(!waitingThread->isFinished());
+
+ fi.reportStarted();
+ QVERIFY(!waitingThread->wait(200));
+ QVERIFY(!waitingThread->isFinished());
+
+ fi.reportFinished();
+
+ QVERIFY(waitingThread->wait());
+ QVERIFY(waitingThread->isFinished());
+}
+
QTEST_MAIN(tst_QFuture)
#include "tst_qfuture.moc"
diff --git a/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp b/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
index 2975afca0f..7180baccca 100644
--- a/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
+++ b/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
@@ -75,11 +75,8 @@ void snippet_QPromise::basicExample()
QPromise<int> promise;
QFuture<int> future = promise.future();
- // Note: calling reportStarted() prior to thread creation to enforce order
- // of calls: first promise.reportStarted() then future.waitForFinished()
- promise.reportStarted(); // notifies QFuture that the computation is started
-
QScopedPointer<QThread> thread(QThread::create([] (QPromise<int> promise) {
+ promise.reportStarted(); // notifies QFuture that the computation is started
promise.addResult(42);
promise.reportFinished(); // notifies QFuture that the computation is finished
}, std::move(promise)));