X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ba14d9861d043d53cc53ea70a2fab4146f7be9f3..ce8897bbff9d364dbef319bdec3db1126eb7fd92:/src/common/timercmn.cpp diff --git a/src/common/timercmn.cpp b/src/common/timercmn.cpp index 63f12e82ce..767ce02e29 100644 --- a/src/common/timercmn.cpp +++ b/src/common/timercmn.cpp @@ -9,9 +9,9 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // (c) 1999 Guillermo Rodriguez -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -36,6 +36,7 @@ #ifndef WX_PRECOMP #include "wx/intl.h" #include "wx/log.h" + #include "wx/thread.h" #endif #include "wx/timer.h" @@ -77,6 +78,10 @@ #include #endif +#ifdef __WXMAC__ + #include + #include +#endif // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -127,6 +132,13 @@ void wxTimerBase::Notify() bool wxTimerBase::Start(int milliseconds, bool oneShot) { + // under MSW timers only work when they're started from the main thread so + // let the caller know about it +#if wxUSE_THREADS + wxASSERT_MSG( wxThread::IsMain(), + _T("timer can only be started from the main thread") ); +#endif // wxUSE_THREADS + if ( IsRunning() ) { // not stopping the already running timer might work for some @@ -157,6 +169,7 @@ void wxStopWatch::Start(long t) { m_t0 = wxGetLocalTimeMillis() - t; m_pause = 0; + m_pauseCount = 0; } long wxStopWatch::GetElapsedTime() const @@ -331,6 +344,26 @@ wxLongLong wxGetLocalTimeMillis() (void)ftime(&tp); val *= tp.time; return (val + tp.millitm); +#elif defined(__WXMAC__) + + static UInt64 gMilliAtStart = 0; + + Nanoseconds upTime = AbsoluteToNanoseconds( UpTime() ); + + if ( gMilliAtStart == 0 ) + { + time_t start = time(NULL); + gMilliAtStart = ((UInt64) start) * 1000000L; + gMilliAtStart -= upTime.lo / 1000 ; + gMilliAtStart -= ( ( (UInt64) upTime.hi ) << 32 ) / (1000 * 1000); + } + + UInt64 millival = gMilliAtStart; + millival += upTime.lo / (1000 * 1000); + millival += ( ( (UInt64) upTime.hi ) << 32 ) / (1000 * 1000); + val = millival; + + return val; #else // no gettimeofday() nor ftime() // We use wxGetLocalTime() to get the seconds since // 00:00:00 Jan 1st 1970 and then whatever is available