Changeset 128


Ignore:
Timestamp:
Aug 16, 2010, 11:40:13 PM (10 years ago)
Author:
sam
Message:

Implement Timer::PollSeconds(), if necessary.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/timer.cpp

    r120 r128  
    4949    }
    5050
    51     float GetOrWait(float seconds)
     51    float GetOrWait(float seconds, bool update)
    5252    {
    5353        float ret, delta_time;
     
    5656        gettimeofday(&tv, NULL);
    5757        ret = 1e-6f * (tv.tv_usec - tv0.tv_usec) + (tv.tv_sec - tv0.tv_sec);
     58        if (update)
     59            tv0 = tv;
    5860        delta_time = seconds - ret;
    59         if (!seconds)
    60             tv0 = tv;
    61         else if (delta_time > 0.0f)
     61        if (delta_time > 0.0f)
    6262            usleep((int)(delta_time * 1e6f));
    6363#elif defined _WIN32
     
    6565        QueryPerformanceCounter(&cycles);
    6666        ret = seconds_per_cycle * (cycles.QuadPart - cycles0.QuadPart);
     67        if (update)
     68            cycles0 = cycles;
    6769        delta_time = seconds - ret;
    68         if (!seconds)
    69             cycles0 = cycles;
    70         else if (delta_time > 5e-4f) // FIXME: use native Win32 stuff
     70        if (delta_time > 5e-4f) // FIXME: use native Win32 stuff
    7171            SDL_Delay((int)(delta_time * 1e3f + 0.5f));
    7272#else
     
    7474        Uint32 ticks = SDL_GetTicks();
    7575        ret = 1e-3f * (ticks - ticks0);
     76        if (update)
     77            ticks0 = ticks;
    7678        delta_time = seconds - ret;
    77         if (!seconds)
    78             ticks0 = ticks;
    79         else if (delta_time > 5e-4f)
     79        if (delta_time > 5e-4f)
    8080            SDL_Delay((int)(delta_time * 1e3f + 0.5f));
    8181#endif
     
    109109float Timer::GetSeconds()
    110110{
    111     return data->GetOrWait(0.0f);
     111    return data->GetOrWait(0.0f, true);
     112}
     113
     114float Timer::PollSeconds()
     115{
     116    return data->GetOrWait(0.0f, false);
    112117}
    113118
    114119void Timer::WaitSeconds(float seconds)
    115120{
    116     (void)data->GetOrWait(seconds);
     121    (void)data->GetOrWait(seconds, false);
    117122}
    118123
  • trunk/src/timer.h

    r116 r128  
    2121
    2222    float GetSeconds();
     23    float PollSeconds();
    2324    void WaitSeconds(float milliseconds);
    2425
Note: See TracChangeset for help on using the changeset viewer.