QTimer: port defaultTypeFor() helper from ms to ns resolution
This doesn't change a thing for QTimer, but is a building block for making its singleShot() have nanosecond resolution, and allows QChronoTimer to reuse the function. Task-number: QTBUG-128426 Change-Id: I3d7e79972f236ca63b216a1a5a871edf5025e1b8 Reviewed-by: Ahmad Samir <a.samirh78@gmail.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 25b8d3743455bd2a4a327e1068fc83acb2f1c481) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
3b7f21996e
commit
ee6b101adf
@ -10,6 +10,7 @@
|
||||
#include <QtCore/qnamespace.h>
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QtCore/qproperty.h>
|
||||
#include <QtCore/qtimer.h>
|
||||
|
||||
#include <chrono>
|
||||
|
||||
@ -68,7 +69,7 @@ public:
|
||||
static void singleShot(std::chrono::nanoseconds interval,
|
||||
const FunctorContext<Functor> *receiver, Functor &&slot)
|
||||
{
|
||||
singleShot(interval, defaultTimerTypeFor(interval), receiver, std::forward<Functor>(slot));
|
||||
singleShot(interval, QTimer::defaultTypeFor(interval), receiver, std::forward<Functor>(slot));
|
||||
}
|
||||
template <typename Functor>
|
||||
static void singleShot(std::chrono::nanoseconds interval, Qt::TimerType timerType,
|
||||
@ -88,14 +89,14 @@ public:
|
||||
template <typename Functor>
|
||||
static void singleShot(std::chrono::nanoseconds interval, Functor &&slot)
|
||||
{
|
||||
singleShot(interval, defaultTimerTypeFor(interval), nullptr, std::forward<Functor>(slot));
|
||||
singleShot(interval, QTimer::defaultTypeFor(interval), nullptr, std::forward<Functor>(slot));
|
||||
}
|
||||
|
||||
static void singleShot(std::chrono::nanoseconds interval, Qt::TimerType timerType,
|
||||
const QObject *receiver, const char *member);
|
||||
static void singleShot(std::chrono::nanoseconds interval, const QObject *receiver,
|
||||
const char *member)
|
||||
{ singleShot(interval, defaultTimerTypeFor(interval), receiver, member); }
|
||||
{ singleShot(interval, QTimer::defaultTypeFor(interval), receiver, member); }
|
||||
|
||||
#ifdef Q_QDOC
|
||||
template <typename Functor>
|
||||
@ -132,12 +133,6 @@ private:
|
||||
int startTimer(std::chrono::nanoseconds) = delete;
|
||||
void killTimer(int) = delete;
|
||||
|
||||
static constexpr Qt::TimerType defaultTimerTypeFor(std::chrono::nanoseconds interval) noexcept
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
return interval >= 2s ? Qt::CoarseTimer : Qt::PreciseTimer;
|
||||
}
|
||||
|
||||
static void singleShotImpl(std::chrono::nanoseconds interval, Qt::TimerType timerType,
|
||||
const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj);
|
||||
};
|
||||
|
@ -142,6 +142,7 @@ protected:
|
||||
private:
|
||||
Q_DISABLE_COPY(QTimer)
|
||||
Q_DECLARE_PRIVATE(QTimer)
|
||||
friend class QChronoTimer;
|
||||
|
||||
inline int startTimer(int){ return -1;}
|
||||
inline void killTimer(int){}
|
||||
@ -149,7 +150,7 @@ private:
|
||||
static constexpr Qt::TimerType defaultTypeFor(int msecs) noexcept
|
||||
{ return defaultTypeFor(std::chrono::milliseconds{msecs}); }
|
||||
|
||||
static constexpr Qt::TimerType defaultTypeFor(std::chrono::milliseconds interval) noexcept
|
||||
static constexpr Qt::TimerType defaultTypeFor(std::chrono::nanoseconds interval) noexcept
|
||||
{
|
||||
// coarse timers are worst in their first firing
|
||||
// so we prefer a high precision timer for something that happens only once
|
||||
|
Loading…
x
Reference in New Issue
Block a user