[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