time_t begintime = time(NULL); // advance the recent buffer if enough time has passed. - if (begintime - last_update_time) - myObjectRuntime.AdvanceBy((begintime - last_update_time)/time_quantum); + time_t delta = (begintime - last_rotate_time); + if (delta > time_quantum) { + myObjectRuntime.AdvanceBy(delta/time_quantum); + last_rotate_time = begintime - (delta % time_quantum); + } ... do some work