Here's something very simple that would be good for starters. However, it will become an infinite loop on too slow of a machine, or if SIM_TICK is too small, or if the scene is too complex, etc. static DWORD dwSimTime = pTimer.GetCurrentTicks(); while ( dwSimTime < pTimer.GetCurrentTicks() ) { dWorldStep ( odeWorld, SIM_TICK ); dwSimTime += (DWORD)(SIM_TICK*1000); }