X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2c8e47380ebbcb5764307d4a8b15e84d8ce74ccf..7ac05a91abea459438b8ea62074108d3daf39568:/src/common/timercmn.cpp diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index e0032d0dc4..035361aaac 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -19,7 +19,7 @@ // ============================================================================ // ---------------------------------------------------------------------------- -// headers +// wxWin headers // ---------------------------------------------------------------------------- #ifdef __GNUG__ @@ -41,10 +41,25 @@ #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 + +#if defined(__VISAGECPP__) && !defined(HAVE_FTIME) + #define HAVE_FTIME +# if __IBMCPP__ >= 400 + # define ftime(x) _ftime(x) +# endif +#endif + #include #ifndef __WXMAC__ #include // for time_t @@ -80,22 +95,16 @@ #endif #endif // HAVE_GETTIMEOFDAY -// ---------------------------------------------------------------------------- -// prototypes -// ---------------------------------------------------------------------------- - -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 @@ -106,6 +115,26 @@ void wxTimerBase::Notify() (void)m_owner->ProcessEvent(event); } +bool wxTimerBase::Start(int milliseconds, bool oneShot) +{ + if ( IsRunning() ) + { + // not stopping the already running timer might work for some + // platforms (no problems under MSW) but leads to mysterious crashes + // on the others (GTK), so to be on the safe side do it here + Stop(); + } + + if ( milliseconds != -1 ) + { + m_milli = milliseconds; + } + + m_oneShot = oneShot; + + return TRUE; +} + #endif // wxUSE_GUI // ---------------------------------------------------------------------------- @@ -191,7 +220,8 @@ long wxGetLocalTime() // Get UTC time as seconds since 00:00:00, Jan 1st 1970 long wxGetUTCTime() { - struct tm tm, *ptm; + struct tm tm; + struct tm *ptm; time_t t0, t1; // This cannot be made static because mktime can overwrite it @@ -253,37 +283,55 @@ wxLongLong wxGetLocalTimeMillis() val *= tp.tv_sec; return (val + (tp.tv_usec / 1000)); } - return 0; + else + { + 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...) + // 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 +#else // no gettimeofday() nor ftime() // 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(); +// GRG: This will go soon as all WIN32 seem to have ftime #if defined (__WIN32__) + // If your platform/compiler needs to use two different functions + // to get ms resolution, please do NOT just shut off these warnings, + // drop me a line instead at + #warning "Possible clock skew bug in wxGetLocalTimeMillis()!" + 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!" +#else // !Win32 + // If your platform/compiler does not support ms resolution please + // do NOT just shut off these warnings, drop me a line instead at + // + + #if defined(__VISUALC__) + #pragma message("wxStopWatch will be up to second resolution!") + #elif defined(__BORLANDC__) + #pragma message "wxStopWatch will be up to second resolution!" + #else + #warning "wxStopWatch will be up to second resolution!" + #endif // compiler #endif return val; -#endif + +#endif // time functions }