diff options
author | Ahmad Samir <a.samirh78@gmail.com> | 2023-02-23 13:33:11 +0200 |
---|---|---|
committer | Ahmad Samir <a.samirh78@gmail.com> | 2023-02-24 18:30:38 +0200 |
commit | 6754795e547211727b7e0409dd0c8eeff441bbfe (patch) | |
tree | b224855b68c7ec627d7cf6050f513a92c3875eaa /src/corelib/kernel/qeventdispatcher_glib.cpp | |
parent | 39a4cd126f177355e326238d95baaeaf845e9453 (diff) |
QTimerInfo: use chrono for time intervals
For VeryCoarseTimer:
- The code used to convert QTimerInfo::interval to seconds in
registerTimer(), then convert to milliseconds when creating
QTimerInfo in registeredTimers(); this is a bit confusing as
"interval" was sometimes milliseconds and sometimes seconds
depending on the type of the timer; instead "round" to the nearest
second while always keeping "interval" in milliseconds (relying on
chrono doing the conversion)..
- Add roundToSecs() helper; it behaves like the original code (i.e.
rounding each 500ms to 1 full second):
const auto list = {300, 499, 500, 600, 1000, 1300, 1499, 1500, 1501,
1600, 2000, 2300, 2499, 2500, 2600};
using namespace std::chrono;
for (int dur : list) {
auto i = dur;
i /= 500; i += 1; i >>= 1; // Original code
milliseconds msec{dur};
seconds secs = duration_cast<seconds>(msec);
milliseconds frac = msec - secs;
if (frac >= 500ms)
secs += 1s;
assert(i == secs.count());
}
----
- Don't mix signed and unsigned when doing arithmetic
The next "chrono-first" step would be changing
QAbstractEventDispatcher::TimerInfo::interval from int to
chrono::milliseconds, and adding a virtual
QAbstractEventDispatcher::registerTimer() overload that takes
chrono::milliseconds; neither can be done until Qt7 due to binary
compatibility constraints, c.f.:
https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++
Task-number: QTBUG-110059
Change-Id: I36f9bd8fb29565b1131afb3cdfc313452f625598
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_glib.cpp')
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_glib.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index c644dd35d8..eeb175c374 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -489,7 +489,8 @@ void QEventDispatcherGlib::registerTimer(int timerId, qint64 interval, Qt::Timer #endif Q_D(QEventDispatcherGlib); - d->timerSource->timerList.registerTimer(timerId, interval, timerType, object); + d->timerSource->timerList.registerTimer(timerId, std::chrono::milliseconds{ interval }, + timerType, object); } bool QEventDispatcherGlib::unregisterTimer(int timerId) |