X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/658c54003b4ef7441dc8b8246ade8df3e457d4fc..399b60a0ad232265cd74ce8bf6a53a1f2cc57ff2:/src/common/timercmn.cpp?ds=sidebyside diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index 3ee44f1757..f6148e0aa9 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -19,7 +19,7 @@ // ============================================================================ // ---------------------------------------------------------------------------- -// headers +// wxWin headers // ---------------------------------------------------------------------------- #ifdef __GNUG__ @@ -41,10 +41,18 @@ #include "wx/timer.h" #include "wx/longlong.h" +// ---------------------------------------------------------------------------- +// System headers +// ---------------------------------------------------------------------------- + #if defined(__WIN32__) #include #endif +#if defined(__WIN32__) && !defined(HAVE_FTIME) + #define HAVE_FTIME +#endif + #include #ifndef __WXMAC__ #include // for time_t @@ -90,12 +98,12 @@ wxLongLong wxGetLocalTimeMillis(); // implementation // ============================================================================ -#if wxUSE_GUI - // ---------------------------------------------------------------------------- // wxTimerBase // ---------------------------------------------------------------------------- +#if wxUSE_GUI + void wxTimerBase::Notify() { // the base class version generates an event if it has owner - which it @@ -224,11 +232,16 @@ long wxGetUTCTime() if (t0 != (time_t)-1 ) return (long)difftime(t1, t0) + (60 * 60 * 24 * 4); - wxLogSysError(_("Failed 2nd mktime")); + wxLogSysError(_("mktime() failed")); + } + else + { + wxLogSysError(_("gmtime() failed")); } - wxLogSysError(_("Failed gmtime")); } - wxLogSysError(_("Failed to get the UTC system time")); + + wxLogError(_("Failed to get the UTC system time.")); + return -1; } @@ -248,33 +261,43 @@ wxLongLong wxGetLocalTimeMillis() val *= tp.tv_sec; return (val + (tp.tv_usec / 1000)); } -#elif defined(HAVE_FTIME) - struct timeb tp; - if ( ftime(&tp) == 0 ) + else { - val *= tp.time; - return (val + tp.millitm); + wxLogError(_("wxGetTimeOfDay failed.")); + return 0; } +#elif defined(HAVE_FTIME) + struct timeb tp; + + // ftime() is void and not int in some mingw32 headers, so don't + // test the return code (well, it shouldn't fail anyhow...) + (void)ftime(&tp); + 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. // - // TODO: This might lead to a problem if the clocks use - // different sources. + // NOTE that this might lead to a problem if the clocks + // use different sources, so this approach should be + // avoided where possible. val *= wxGetLocalTime(); -#if defined (__WIN32__) - SYSTEMTIME st; - ::GetLocalTime(&st); - val += st.wMilliseconds; -#elif defined(__VISAGECPP__) +#if defined(__VISAGECPP__) DATETIME dt; ::DosGetDateTime(&dt); val += (dt.hundredths*10); +#elif defined (__WIN32__) +#warning "Possible clock skew bug in wxStopWatch!" + SYSTEMTIME st; + ::GetLocalTime(&st); + val += st.wMilliseconds; #else +#ifndef __VISUALC__ #warning "wxStopWatch will be up to second resolution!" +#endif #endif return val;