Fixed potential bug related to clock skew when different clocks are used

for hi and lo res timing. Still to be solved where ftime or gettimeofday
are not available!


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6359 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Guillermo Rodriguez Garcia
2000-02-29 20:57:58 +00:00
parent e72b421324
commit 658c54003b

View File

@@ -238,6 +238,9 @@ wxLongLong wxGetLocalTimeMillis()
{
wxLongLong val = 1000l;
// If possible, use a functin which avoids conversions from
// broken-up time structures to milliseconds,
#if defined(HAVE_GETTIMEOFDAY)
struct timeval tp;
if ( wxGetTimeOfDay(&tp, (struct timezone *)NULL) != -1 )
@@ -245,35 +248,36 @@ wxLongLong wxGetLocalTimeMillis()
val *= tp.tv_sec;
return (val + (tp.tv_usec / 1000));
}
#else
// We use wxGetLocalTime() to get the seconds since
// 00:00:00 Jan 1st 1970 and then whatever is available
// to get millisecond resolution.
// THIS LEADS TO A BUG SINCE REFERENCE TIME ARE DIFFERENT
val *= wxGetLocalTime();
// If we got here, do not fail even if we can't get
// millisecond resolution.
//
#if defined(__WIN32__)
SYSTEMTIME st;
::GetLocalTime(&st);
return (val + st.wMilliseconds);
#elif defined(__VISAGECPP__)
DATETIME dt;
::DosGetDateTime(&dt);
return (val + dt.hundredths*10);
#elif defined(HAVE_FTIME)
struct timeb tp;
if ( ftime(&tp) == 0 )
{
val *= tp.time;
return (val + tp.millitm);
}
#elif !defined(__BORLANDC__) && !(defined(__VISUALC__) && defined(__WIN16__))
#warning "wxStopWatch will be up to second resolution!"
#endif
#else
// We use wxGetLocalTime() to get the seconds since
// 00:00:00 Jan 1st 1970 and then whatever is available
// to get millisecond resolution.
//
// TODO: This might lead to a problem if the clocks use
// different sources.
val *= wxGetLocalTime();
#if defined (__WIN32__)
SYSTEMTIME st;
::GetLocalTime(&st);
val += st.wMilliseconds;
#elif defined(__VISAGECPP__)
DATETIME dt;
::DosGetDateTime(&dt);
val += (dt.hundredths*10);
#else
#warning "wxStopWatch will be up to second resolution!"
#endif
return val;
#endif
}