Implement QTest::qWait() in terms of QTest::qWaitFor()
A comment in the existing implementation encouraged doing so, but for a bug in GCC 6. We no longer care. Change-Id: Ia8cb2bc5e184510e3d756e8bbfe6bc0e852e6830 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
d41d3274d4
commit
5c908c8263
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 The Qt Company Ltd.
|
||||
** Copyright (C) 2021 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
@ -107,23 +107,7 @@ Q_CORE_EXPORT void QTest::qSleep(int ms)
|
||||
*/
|
||||
Q_CORE_EXPORT void QTest::qWait(int ms)
|
||||
{
|
||||
// Ideally this method would be implemented in terms of qWaitFor, with
|
||||
// a predicate that always returns false, but due to a compiler bug in
|
||||
// GCC 6 we can't do that.
|
||||
|
||||
Q_ASSERT(QCoreApplication::instance());
|
||||
|
||||
QDeadlineTimer timer(ms, Qt::PreciseTimer);
|
||||
int remaining = ms;
|
||||
do {
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
|
||||
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
|
||||
remaining = timer.remainingTime();
|
||||
if (remaining <= 0)
|
||||
break;
|
||||
QTest::qSleep(qMin(10, remaining));
|
||||
remaining = timer.remainingTime();
|
||||
} while (remaining > 0);
|
||||
(void)qWaitFor([]() { return false; }, ms);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
Reference in New Issue
Block a user