Files
Mozilla/mozilla/widget/timer/src/os2/nsTimerOS2.h
ramiro%netscape.com 9214c98f6a Move the timers to their final resting ground. Im sorry. I screwed up
last time by putting them on the top level.  Ive learned my lesson.  Dont
scrweup unless you can really get away with it.


git-svn-id: svn://10.0.0.236/trunk@40241 18797224-902f-48f8-a5cc-f745e15eee43
1999-07-20 06:18:42 +00:00

117 lines
3.0 KiB
C++

/*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is the Mozilla OS/2 libraries.
*
* The Initial Developer of the Original Code is John Fairhurst,
* <john_fairhurst@iname.com>. Portions created by John Fairhurst are
* Copyright (C) 1999 John Fairhurst. All Rights Reserved.
*
* Contributor(s):
*
*/
#ifndef _nstimeros2_h
#define _nstimeros2_h
// Class definitions for the timers.
//
// These timer classes are reentrant, thread-correct and supports recycling of
// timer objects on a per-thread basis.
#include "nsITimer.h"
#include "nsITimerCallback.h"
// Implementation of the timer interface.
class nsTimerManager;
class nsTimer : public nsITimer
{
public:
nsTimer( nsTimerManager *aManager);
virtual ~nsTimer();
// nsISupports
NS_DECL_ISUPPORTS
// Explicit init-term for recycler
void Construct();
void Destruct();
nsresult Init( nsTimerCallbackFunc aFunc, void *aClosure, PRUint32 aDelay);
nsresult Init( nsITimerCallback *aCallback, PRUint32 aDelay);
void Cancel();
PRUint32 GetDelay() { return mDelay; }
void SetDelay( PRUint32 aDelay) {}; // XXX Windows does this too...
void *GetClosure() { return mClosure; }
// Implementation
void Fire( ULONG aNow);
private:
PRUint32 mDelay;
nsTimerCallbackFunc mFunc;
void *mClosure;
nsITimerCallback *mCallback;
ULONG mFireTime;
nsTimer *mNext;
friend class nsTimerManager;
nsTimerManager *mManager;
};
// Timer manager class, one of these per-thread
class nsTimerManager
{
public:
nsTimerManager();
~nsTimerManager();
nsresult InitTimer( nsTimer *aTimer, PRUint32 aDelay);
void CancelTimer( nsTimer *aTimer);
MRESULT HandleMsg( ULONG msg, MPARAM mp1, MPARAM mp2);
nsTimer *CreateTimer();
void DisposeTimer( nsTimer *aTimer);
private:
nsTimer *mTimerList; // linked list of active timers, sorted in priority order
BOOL mTimerSet; // timer running?
ULONG mNextFire; // absolute time of next fire
HWND mHWNDTimer; // window for timer messages
BOOL mBusy; // dubious lock thingy
void StartTimer( UINT delay);
void StopTimer();
void EnsureWndClass();
void ProcessTimeouts( ULONG aNow);
void SyncTimeoutPeriod( ULONG aTickCount);
// timer-cache
nsTimer *mBase;
UINT mSize;
#ifdef PROFILE_TIMERS
UINT mDeleted;
UINT mActive;
UINT mCount;
UINT mPeak;
TID mTID;
#endif
};
#endif