function will be called repeatedly until the timer is stopped. If TRUE,
it will be called only once and the timer will stop automatically.
+If the timer was already running, it will be stopped by this method before
+restarting it.
+
\membersection{wxTimer::Stop}\label{wxtimerstop}
\func{void}{Stop}{\void}
// start the timer: if milliseconds == -1, use the same value as for the
// last Start()
- virtual bool Start(int milliseconds = -1, bool oneShot = FALSE)
- {
- if ( milliseconds != -1 )
- {
- m_milli = milliseconds;
- }
-
- m_oneShot = oneShot;
-
- return TRUE;
- }
-
+ //
+ // it is now valid to call Start() multiple times: this just restarts the
+ // timer if it is already running
+ virtual bool Start(int milliseconds = -1, bool oneShot = FALSE);
// stop the timer
virtual void Stop() = 0;
(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
// ----------------------------------------------------------------------------