X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..dfe8399aa013a1fa6487d008bf1176078f218c6d:/src/common/timercmn.cpp diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index ecf4d66387..1d89b6507d 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -53,6 +53,18 @@ #define HAVE_FTIME #endif +#if defined(__VISAGECPP__) && !defined(HAVE_FTIME) + #define HAVE_FTIME +# if __IBMCPP__ >= 400 + # define ftime(x) _ftime(x) +# endif +#endif + +#if defined(__MWERKS__) && defined(__WXMSW__) +# undef HAVE_FTIME +# undef HAVE_GETTIMEOFDAY +#endif + #include #ifndef __WXMAC__ #include // for time_t @@ -69,7 +81,7 @@ // wxWin macros // ---------------------------------------------------------------------------- -#if wxUSE_GUI +#if wxUSE_GUI && wxUSE_TIMER IMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent) #endif // wxUSE_GUI @@ -96,7 +108,12 @@ // wxTimerBase // ---------------------------------------------------------------------------- -#if wxUSE_GUI +#if wxUSE_GUI && wxUSE_TIMER + +wxTimerBase::~wxTimerBase() +{ + // this destructor is required for Darwin +} void wxTimerBase::Notify() { @@ -108,12 +125,34 @@ 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 // ---------------------------------------------------------------------------- // wxStopWatch // ---------------------------------------------------------------------------- +#if wxUSE_LONGLONG + void wxStopWatch::Start(long t) { m_t0 = wxGetLocalTimeMillis() - t; @@ -122,18 +161,22 @@ void wxStopWatch::Start(long t) long wxStopWatch::GetElapsedTime() const { - return (wxGetLocalTimeMillis() - m_t0).GetLo(); + return (wxGetLocalTimeMillis() - m_t0).GetLo(); } long wxStopWatch::Time() const { - return (m_pause ? m_pause : GetElapsedTime()); + return m_pauseCount ? m_pause : GetElapsedTime(); } +#endif // wxUSE_LONGLONG + // ---------------------------------------------------------------------------- // old timer functions superceded by wxStopWatch // ---------------------------------------------------------------------------- +#if wxUSE_LONGLONG + static wxLongLong wxStartTime = 0l; // starts the global timer @@ -154,6 +197,7 @@ long wxGetElapsedTime(bool resetTimer) return (newTime - oldTime).GetLo(); } +#endif // wxUSE_LONGLONG // ---------------------------------------------------------------------------- // the functions to get the current time and timezone info @@ -193,7 +237,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 @@ -239,14 +284,15 @@ long wxGetUTCTime() return -1; } +#if wxUSE_LONGLONG // Get local time as milliseconds since 00:00:00, Jan 1st 1970 wxLongLong wxGetLocalTimeMillis() { wxLongLong val = 1000l; - // If possible, use a functin which avoids conversions from - // broken-up time structures to milliseconds, + // If possible, use a function which avoids conversions from + // broken-up time structures to milliseconds #if defined(HAVE_GETTIMEOFDAY) struct timeval tp; @@ -279,16 +325,8 @@ wxLongLong wxGetLocalTimeMillis() val *= wxGetLocalTime(); -#if defined(__VISAGECPP__) - // 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()!" - - DATETIME dt; - ::DosGetDateTime(&dt); - val += (dt.hundredths*10); -#elif defined (__WIN32__) +// 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 @@ -302,7 +340,7 @@ wxLongLong wxGetLocalTimeMillis() // do NOT just shut off these warnings, drop me a line instead at // - #if defined(__VISUALC__) + #if defined(__VISUALC__) || defined (__WATCOMC__) #pragma message("wxStopWatch will be up to second resolution!") #elif defined(__BORLANDC__) #pragma message "wxStopWatch will be up to second resolution!" @@ -315,3 +353,6 @@ wxLongLong wxGetLocalTimeMillis() #endif // time functions } + +#endif // wxUSE_LONGLONG +