]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/common/timercmn.cpp
fix memory leak (coverity checker CID 53)
[wxWidgets.git] / src / common / timercmn.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: common/timercmn.cpp
3// Purpose: wxTimerBase implementation
4// Author: Julian Smart, Guillermo Rodriguez, Vadim Zeitlin
5// Modified by: VZ: extracted all non-wxTimer stuff in stopwatch.cpp (20.06.03)
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// (c) 1999 Guillermo Rodriguez <guille@iies.es>
10// Licence: wxWindows licence
11/////////////////////////////////////////////////////////////////////////////
12
13// ============================================================================
14// declarations
15// ============================================================================
16
17// ----------------------------------------------------------------------------
18// wxWin headers
19// ----------------------------------------------------------------------------
20
21// For compilers that support precompilation, includes "wx.h".
22#include "wx/wxprec.h"
23
24#ifdef __BORLANDC__
25 #pragma hdrstop
26#endif
27
28#if wxUSE_TIMER
29
30#ifndef WX_PRECOMP
31 #include "wx/timer.h"
32#endif
33
34// ----------------------------------------------------------------------------
35// wxWin macros
36// ----------------------------------------------------------------------------
37
38IMPLEMENT_DYNAMIC_CLASS(wxTimerEvent, wxEvent)
39
40// ============================================================================
41// wxTimerBase implementation
42// ============================================================================
43
44wxTimerBase::~wxTimerBase()
45{
46 // this destructor is required for Darwin
47}
48
49void wxTimerBase::Notify()
50{
51 // the base class version generates an event if it has owner - which it
52 // should because otherwise nobody can process timer events
53 wxCHECK_RET( m_owner, _T("wxTimer::Notify() should be overridden.") );
54
55 wxTimerEvent event(m_idTimer, m_milli);
56 event.SetEventObject(this);
57 (void)m_owner->ProcessEvent(event);
58}
59
60bool wxTimerBase::Start(int milliseconds, bool oneShot)
61{
62 // under MSW timers only work when they're started from the main thread so
63 // let the caller know about it
64#if wxUSE_THREADS
65 wxASSERT_MSG( wxThread::IsMain(),
66 _T("timer can only be started from the main thread") );
67#endif // wxUSE_THREADS
68
69 if ( IsRunning() )
70 {
71 // not stopping the already running timer might work for some
72 // platforms (no problems under MSW) but leads to mysterious crashes
73 // on the others (GTK), so to be on the safe side do it here
74 Stop();
75 }
76
77 if ( milliseconds != -1 )
78 {
79 m_milli = milliseconds;
80 }
81
82 m_oneShot = oneShot;
83
84 return true;
85}
86
87#endif // wxUSE_TIMER
88