[Interest] QTimer and Qt::PreciseTimer
Joshua Grauman
jnfo-c at grauman.com
Sat Jul 29 22:21:45 CEST 2017
Sorry, I'm seeing new things here.
I see under Linux that clock_gettime(), has options for CLOCK_MONOTONIC,
and also CLOCK_MONOTONIC_RAW. CLOCK_MONOTONIC "is affected by the
incremental adjustments performed by adjtime and NTP." So it seems that
would be best? Which does QElapsedTimer use?
Thanks again!
Josh
> Thiago,
>
> Thanks, this is really helpful. This particular code is only used by me (I've
> added a module to my program to allow screencasting of my program with alpha
> channel so that it can be overlaid over video of me. Hence the need for the
> clock to be roughly synched to the camera clock so the video and screencast
> are in synch). So I am just trying to optimize the situation to get the best
> clock for me. So when I was reading about ntp, it sounded like it would
> gently adjust the time (speed up / slow down internal clock to synch with
> time), and thereby correct for drift over time. But it sounds like switching
> to QElapsedTimer is better.
>
> Do you know offhand about how accurate typical PC system clocks are? I'm
> wondering about how much drift there would be after an hour of recording
> screencasts.
>
> Josh
>
>
>> On Friday, 28 July 2017 16:15:27 PDT Joshua Grauman wrote:
>> > I have a related but different question.
>> >
>> > I am reading the time with QDateTime::currentMSecsSinceEpoch(). How
>> > susceptible is this time to clock drift/jitter/etc. on Linux (Kubuntu
>> > 16.04.2)?
>>
>> It's susceptible to complete jumps. You're using the realtime clock.
>>
>> > I know ntpd is constantly updating the time, and there is some
>> > error involved in this.
>>
>> How do you know that all your users are using ntpd? How do you know that
>> they
>> are in a network that allows NTP packets (it's UDP)?
>>
>> And how sure are you that the system won't run ntpdate on a whim once you
>> connect to a network? (it shouldn't, but a lot of poorly-configured
>> systems
>> exist)
>>
>> > If I am reading the time from
>> > QDateTime::currentMSecsSinceEpoch() and using it to set a QTimer every
>> > 40ms, how does ntpd constantly correcting the time going to affect this,
>> > if at all?
>>
>> QTimer has nothing to do with the current wall-clock time. The Qt event
>> loop
>> uses the monotonic clock exclusively.
>>
>> > FYI: My timer slot basically looks like this:
>> >
>> > void myClass::animationTimerSlot(void)
>> > {
>> > if(firstTime)
>> > startTime=QDateTime::currentMSecsSinceEpoch();
>> >
>> > dowork();
>> >
>> > frameCnt++;
>> > int t = startTime + ((double)frameCnt*40.0) -
>> > QDateTime::currentMSecsSinceEpoch(); if(t<0)
>> > t=0;
>> > animTimer->start(t);
>> > }
>>
>> Your code is susceptible to time jumps. If the clock went backwards for a
>> second (for example), your t would be about 1000 and your animation would
>> stop
>> for a second.
>>
>> Use the monotonic clock instead.
>>
>> --
>> Thiago Macieira - thiago.macieira (AT) intel.com
>> Software Architect - Intel Open Source Technology Center
>>
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
More information about the Interest
mailing list