diff options
Diffstat (limited to 'tests/auto/corelib/thread')
-rw-r--r-- | tests/auto/corelib/thread/qfuture/tst_qfuture.cpp | 25 | ||||
-rw-r--r-- | tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp | 5 |
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))); |