From: Guillermo Rodriguez Garcia Date: Tue, 29 Feb 2000 20:57:58 +0000 (+0000) Subject: Fixed potential bug related to clock skew when different clocks are used X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/658c54003b4ef7441dc8b8246ade8df3e457d4fc?ds=inline 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 --- diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index 5c9fe9bd39..3ee44f1757 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -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)); } +#elif defined(HAVE_FTIME) + struct timeb tp; + if ( ftime(&tp) == 0 ) + { + val *= tp.time; + return (val + tp.millitm); + } #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 + // + // TODO: This might lead to a problem if the clocks use + // different sources. + val *= wxGetLocalTime(); - // If we got here, do not fail even if we can't get - // millisecond resolution. - // -#if defined(__WIN32__) +#if defined (__WIN32__) SYSTEMTIME st; ::GetLocalTime(&st); - return (val + st.wMilliseconds); + val += st.wMilliseconds; #elif defined(__VISAGECPP__) - DATETIME dt; + DATETIME dt; ::DosGetDateTime(&dt); - return (val + dt.hundredths*10); -#elif defined(HAVE_FTIME) - struct timeb tp; - if ( ftime(&tp) == 0 ) - { - return (val + tp.millitm); - } -#elif !defined(__BORLANDC__) && !(defined(__VISUALC__) && defined(__WIN16__)) - #warning "wxStopWatch will be up to second resolution!" -#endif + val += (dt.hundredths*10); +#else +#warning "wxStopWatch will be up to second resolution!" #endif return val; + +#endif }