Real time on Windows 7

Hi Experts,
I had a wireframe object and had a file describing how it moved in time.  I was using C++ with Win32 libraries and the wireframe was running in an OpenGL window.  The file described a smooth motion through time without any quick movements, and the code I wrote to do the movements worked well- most of the time.  It worked very simply- with a Sleep(milliseconds) between each movement.  Again, the transition was bang on most of the time.  But sometimes the Sleep calls appeared to not wait at all and the mesh moved in an explosive display of fast movements as if there were no wait.  So always the same input, the same code, but different iterations of the same program with different results.  So is the problem the Windows clock?  (are there known issues for things like this).  And if yes, would a timer with a callback been better for some reason?  Or is what I'm trying to do here not very easily achieved?

Thanks for any help!
Mike
LVL 1
threadyAsked:
Who is Participating?
 
jkrConnect With a Mentor Commented:
If you basically need a better timer resolution, multimedia timers might be what yo're looking for, see http://www.codeproject.com/Articles/1236/Timers-Tutorial
0
 
threadyAuthor Commented:
So basically, the issue is, I have a series of discrete movements that need some time between them before changing location....
0
 
Jaime OlivaresSoftware ArchitectCommented:
Hi thready,
The sleep approach is not a common practice, considering that it won't ensure you an specific period, because the render time is added to that timespan.
On the other hand, the timer approach is used regularly for ensuring always the same timespan between each render.
An intermediate approach without a timer is to use a time variable to wait for the proper time to render inside a inner while loop. In pseudocode it would be something like:

p = period in miliseconds
t0 = current_time
do
{
      t1 = t0 + p  
      Render_your_scene()
      while (current_time < t1)
      {
           sleep(10)    // sleep a very small amount of time in milliseconds
      }
      t0 = t1
} while (!some_exit_condition)
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
threadyAuthor Commented:
Hi jaime- your code is the code that I am describing.  The sleep doesn't work (for the small amount of milliseconds), because I'm working with a medical device that runs at 60Hz- so the sleeps are often only about 4 milliseconds!  I'm wondering if the timer approach will work better because maybe it doesn't come from the same system clock as the sleep function uses?
0
 
Jaime OlivaresSoftware ArchitectCommented:
in the code I have provided, it is not much meaningful the period of the sleep as far at it is slow, but the value of 'p'
the loop containing the sleep will be executed many times until the period 'p' is completed
0
 
threadyAuthor Commented:
ok so we could take p out of there basically- it's just a way to remove CPU starvation... Cool.
0
 
threadyAuthor Commented:
sorry- i meant take the sleep out of there.......  :-P
0
 
Jaime OlivaresSoftware ArchitectCommented:
if you remove that sleep, the CPU usage will raise to 100%
but I guess that is not a big deal in multi-core computers nowadays :)
0
 
threadyAuthor Commented:
I noticed from jkr's link that on Windows, you start getting into trouble with timers below 10ms.  I wonder how precise multimedia timers can get.
0
 
jkrCommented:
See yourself - http://msdn.microsoft.com/en-us/library/dd742877%28VS.85%29.aspx ("About Multimedia Timers"):

These timer services are useful for applications that demand high-resolution timing. For example, a MIDI sequencer requires a high-resolution timer because it must maintain the pace of MIDI events within a resolution of 1 millisecond.
0
 
threadyAuthor Commented:
This was just what I was looking for!  Thank you!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.