reset one shot timer internal state instead of leaving it thinking that it's still running (mdified patch 1730597)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46324 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -31,10 +31,17 @@ public:
|
|||||||
virtual bool Start(int milliseconds = -1, bool oneShot = false);
|
virtual bool Start(int milliseconds = -1, bool oneShot = false);
|
||||||
virtual void Stop();
|
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:
|
private:
|
||||||
bool m_isRunning;
|
bool m_isRunning;
|
||||||
|
|
||||||
friend class wxTimerScheduler;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/apptrait.h"
|
#include "wx/apptrait.h"
|
||||||
#include "wx/platinfo.h"
|
#include "wx/platinfo.h"
|
||||||
|
#include "wx/wxchar.h"
|
||||||
|
|
||||||
// without this pragma, the stupid compiler precompiles #defines below so that
|
// without this pragma, the stupid compiler precompiles #defines below so that
|
||||||
// changing them doesn't "take place" later!
|
// changing them doesn't "take place" later!
|
||||||
@@ -2958,6 +2959,7 @@ void TestTimer()
|
|||||||
virtual void Notify()
|
virtual void Notify()
|
||||||
{
|
{
|
||||||
wxPrintf(_T("%d"), m_num++);
|
wxPrintf(_T("%d"), m_num++);
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
if ( m_num == 10 )
|
if ( m_num == 10 )
|
||||||
{
|
{
|
||||||
@@ -2977,6 +2979,11 @@ void TestTimer()
|
|||||||
|
|
||||||
wxEventLoop loop;
|
wxEventLoop loop;
|
||||||
|
|
||||||
|
wxTimer timer1;
|
||||||
|
timer1.Start(100, true /* one shot */);
|
||||||
|
timer1.Stop();
|
||||||
|
timer1.Start(100, true /* one shot */);
|
||||||
|
|
||||||
MyTimer timer;
|
MyTimer timer;
|
||||||
timer.Start(500);
|
timer.Start(500);
|
||||||
|
|
||||||
|
@@ -159,6 +159,11 @@ void wxTimerScheduler::NotifyExpired()
|
|||||||
wxUnixTimerImpl * const timer = s->m_timer;
|
wxUnixTimerImpl * const timer = s->m_timer;
|
||||||
if ( timer->IsOneShot() )
|
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
|
// don't need it any more
|
||||||
delete s;
|
delete s;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user