From 658c54003b4ef7441dc8b8246ade8df3e457d4fc Mon Sep 17 00:00:00 2001 From: Guillermo Rodriguez Garcia Date: Tue, 29 Feb 2000 20:57:58 +0000 Subject: [PATCH] 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 --- src/common/timercmn.cpp | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) 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 } -- 2.50.0