]> git.saurik.com Git - wxWidgets.git/commitdiff
reset one shot timer internal state instead of leaving it thinking that it's still...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 4 Jun 2007 13:34:54 +0000 (13:34 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 4 Jun 2007 13:34:54 +0000 (13:34 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/unix/private/timer.h
samples/console/console.cpp
src/unix/timerunx.cpp

index cdcf53b3d22ae3f24af896c7d6228f4a49b5a65d..17776738c99c9a2054faac9557167cb9a6286a40 100644 (file)
@@ -31,10 +31,17 @@ public:
     virtual bool Start(int milliseconds = -1, bool oneShot = false);
     virtual void Stop();
 
+    // for wxTimerScheduler only: resets the internal flag indicating that the
+    // timer is running
+    void MarkStopped()
+    {
+        wxASSERT_MSG( m_isRunning, _T("stopping non-running timer?") );
+
+        m_isRunning = false;
+    }
+
 private:
     bool m_isRunning;
-
-    friend class wxTimerScheduler;
 };
 
 // ----------------------------------------------------------------------------
index 696467232b9b4721ae3fd09ab230e8c808fd8ec4..2244fb1ceecdff27681816da44cce239769d98be 100644 (file)
@@ -27,6 +27,7 @@
 #include "wx/log.h"
 #include "wx/apptrait.h"
 #include "wx/platinfo.h"
+#include "wx/wxchar.h"
 
 // without this pragma, the stupid compiler precompiles #defines below so that
 // changing them doesn't "take place" later!
@@ -2958,6 +2959,7 @@ void TestTimer()
         virtual void Notify()
         {
             wxPrintf(_T("%d"), m_num++);
+            fflush(stdout);
 
             if ( m_num == 10 )
             {
@@ -2977,6 +2979,11 @@ void TestTimer()
 
     wxEventLoop loop;
 
+    wxTimer timer1;
+    timer1.Start(100, true /* one shot */);
+    timer1.Stop();
+    timer1.Start(100, true /* one shot */);
+
     MyTimer timer;
     timer.Start(500);
 
index 12dc0bdf27407a5b9897ce24f5d78fed57d88bab..c7734b423572fe0aa72c5b023335eb5be01019b8 100644 (file)
@@ -159,6 +159,11 @@ void wxTimerScheduler::NotifyExpired()
         wxUnixTimerImpl * const timer = s->m_timer;
         if ( timer->IsOneShot() )
         {
+            // the timer needs to be stopped but don't call its Stop() from
+            // here as it would attempt to remove the timer from our list and
+            // we had already done it, so we just need to reset its state
+            timer->MarkStopped();
+
             // don't need it any more
             delete s;
         }