timer queue name changes

This commit is contained in:
Jeff Hill
2001-03-08 21:54:45 +00:00
parent 6fccebc954
commit c6c4b1b4c3
6 changed files with 41 additions and 35 deletions

View File

@@ -101,19 +101,19 @@ epicsTimerNotify::expireStatus epicsTimerForC::expire ()
return noRestart;
}
tsFreeList < epicsTimerQueueForC > epicsTimerQueueForC::freeList;
epicsMutex epicsTimerQueueForC::freeListMutex;
tsFreeList < epicsTimerQueueActiveForC > epicsTimerQueueActiveForC::freeList;
epicsMutex epicsTimerQueueActiveForC::freeListMutex;
epicsTimerQueueForC::epicsTimerQueueForC ( bool okToShare, unsigned priority ) :
epicsTimerQueueActiveForC::epicsTimerQueueActiveForC ( bool okToShare, unsigned priority ) :
timerQueueActive ( okToShare, priority )
{
}
epicsTimerQueueForC::~epicsTimerQueueForC ()
epicsTimerQueueActiveForC::~epicsTimerQueueActiveForC ()
{
}
void epicsTimerQueueForC::release ()
void epicsTimerQueueActiveForC::release ()
{
queueMgr.release ( *this );
}
@@ -205,7 +205,7 @@ extern "C" epicsTimerQueueId epicsShareAPI
epicsTimerQueueAllocate ( int okToShare, unsigned int threadPriority )
{
try {
epicsTimerQueueForC &tmr = queueMgr.allocate ( okToShare ? true : false, threadPriority );
epicsTimerQueueActiveForC &tmr = queueMgr.allocate ( okToShare ? true : false, threadPriority );
return &tmr;
}
catch ( ... ) {

View File

@@ -51,15 +51,21 @@ public:
class epicsTimerQueue {
public:
static epicsShareFunc epicsTimerQueue & allocate (
bool okToShare, int threadPriority = epicsThreadPriorityMin + 10 );
virtual void release () = 0;
virtual epicsTimer & createTimer ( epicsTimerNotify & ) = 0;
virtual void show ( unsigned int level ) const = 0;
protected:
virtual ~epicsTimerQueue () = 0;
};
class epicsTimerQueueActive : public epicsTimerQueue {
public:
static epicsShareFunc epicsTimerQueueActive & allocate (
bool okToShare, int threadPriority = epicsThreadPriorityMin + 10 );
virtual void release () = 0;
protected:
virtual ~epicsTimerQueueActive () = 0;
};
class epicsTimerQueueNotify {
public:
// called when a new timer is inserted into the queue and the
@@ -67,14 +73,12 @@ public:
virtual void reschedule () = 0;
};
class epicsTimerQueuePassive {
class epicsTimerQueuePassive : public epicsTimerQueue {
public:
static epicsShareFunc epicsTimerQueuePassive & create ( epicsTimerQueueNotify & );
virtual ~epicsTimerQueuePassive () = 0;
virtual epicsTimer & createTimer ( epicsTimerNotify & ) = 0;
virtual void process () = 0;
virtual double getNextExpireDelay () const = 0;
virtual void show ( unsigned int level ) const = 0;
};
inline epicsTimerNotify::expireStatus::expireStatus ( restart_t restart ) :
@@ -108,7 +112,7 @@ typedef struct epicsTimerForC * epicsTimerId;
typedef void ( *epicsTimerCallback ) ( void *pPrivate );
/* thread managed timer queue */
typedef struct epicsTimerQueueForC * epicsTimerQueueId;
typedef struct epicsTimerQueueActiveForC * epicsTimerQueueId;
epicsShareFunc epicsTimerQueueId epicsShareAPI
epicsTimerQueueAllocate ( int okToShare, unsigned int threadPriority );
epicsShareFunc void epicsShareAPI

View File

@@ -96,7 +96,7 @@ private:
friend class timerQueueActiveMgr;
};
class timerQueueActive : public epicsTimerQueue,
class timerQueueActive : public epicsTimerQueueActive,
public epicsThreadRunable, public epicsTimerQueueNotify,
public timerQueueActiveMgrPrivate {
public:
@@ -119,29 +119,29 @@ private:
void reschedule ();
};
struct epicsTimerQueueForC : public timerQueueActive,
public tsDLNode < epicsTimerQueueForC > {
struct epicsTimerQueueActiveForC : public timerQueueActive,
public tsDLNode < epicsTimerQueueActiveForC > {
public:
epicsTimerQueueForC ( bool okToShare, unsigned priority );
epicsTimerQueueActiveForC ( bool okToShare, unsigned priority );
void release ();
void * operator new ( size_t size );
void operator delete ( void *pCadaver, size_t size );
protected:
virtual ~epicsTimerQueueForC ();
virtual ~epicsTimerQueueActiveForC ();
private:
static tsFreeList < epicsTimerQueueForC > freeList;
static tsFreeList < epicsTimerQueueActiveForC > freeList;
static epicsMutex freeListMutex;
};
class timerQueueActiveMgr {
public:
~timerQueueActiveMgr ();
epicsTimerQueueForC & allocate ( bool okToShare,
epicsTimerQueueActiveForC & allocate ( bool okToShare,
int threadPriority = epicsThreadPriorityMin + 10 );
void release ( epicsTimerQueueForC & );
void release ( epicsTimerQueueActiveForC & );
private:
epicsMutex mutex;
tsDLList < epicsTimerQueueForC > sharedQueueList;
tsDLList < epicsTimerQueueActiveForC > sharedQueueList;
};
extern timerQueueActiveMgr queueMgr;
@@ -223,16 +223,16 @@ inline timerQueue & timerQueuePassive::getTimerQueue ()
return this->queue;
}
inline void * epicsTimerQueueForC::operator new ( size_t size )
inline void * epicsTimerQueueActiveForC::operator new ( size_t size )
{
epicsAutoMutex locker ( epicsTimerQueueForC::freeListMutex );
return epicsTimerQueueForC::freeList.allocate ( size );
epicsAutoMutex locker ( epicsTimerQueueActiveForC::freeListMutex );
return epicsTimerQueueActiveForC::freeList.allocate ( size );
}
inline void epicsTimerQueueForC::operator delete ( void *pCadaver, size_t size )
inline void epicsTimerQueueActiveForC::operator delete ( void *pCadaver, size_t size )
{
epicsAutoMutex locker ( epicsTimerQueueForC::freeListMutex );
epicsTimerQueueForC::freeList.release ( pCadaver, size );
epicsAutoMutex locker ( epicsTimerQueueActiveForC::freeListMutex );
epicsTimerQueueActiveForC::freeList.release ( pCadaver, size );
}
#endif // epicsTimerPrivate_h

View File

@@ -31,6 +31,8 @@
#define epicsExportSharedSymbols
#include "timerPrivate.h"
epicsTimerQueue::~epicsTimerQueue () {}
timerQueue::timerQueue ( epicsTimerQueueNotify &notifyIn ) :
notify ( notifyIn ), pExpireTmr ( 0 ),
processThread ( 0 ), cancelPending ( false )

View File

@@ -33,15 +33,15 @@
timerQueueActiveMgr queueMgr;
epicsTimerQueue::~epicsTimerQueue () {}
epicsTimerQueueActive::~epicsTimerQueueActive () {}
epicsTimerQueue &epicsTimerQueue::allocate ( bool okToShare, int threadPriority )
epicsTimerQueueActive &epicsTimerQueueActive::allocate ( bool okToShare, int threadPriority )
{
return queueMgr.allocate ( okToShare, threadPriority );
}
timerQueueActive::timerQueueActive ( bool okToShareIn, unsigned priority ) :
queue ( *this ), thread ( *this, "epicsTimerQueue",
queue ( *this ), thread ( *this, "epicsTimerQueueActive",
epicsThreadGetStackSize ( epicsThreadStackMedium ), priority ),
okToShare ( okToShareIn ), exitFlag ( false ), terminateFlag ( false )
{

View File

@@ -38,12 +38,12 @@ timerQueueActiveMgr::~timerQueueActiveMgr ()
epicsAutoMutex locker ( this->mutex );
}
epicsTimerQueueForC & timerQueueActiveMgr::allocate (
epicsTimerQueueActiveForC & timerQueueActiveMgr::allocate (
bool okToShare, int threadPriority )
{
epicsAutoMutex locker ( this->mutex );
if ( okToShare ) {
tsDLIterBD < epicsTimerQueueForC > iter = this->sharedQueueList.firstIter ();
tsDLIterBD < epicsTimerQueueActiveForC > iter = this->sharedQueueList.firstIter ();
while ( iter.valid () ) {
if ( iter->threadPriority () == threadPriority ) {
assert ( iter->timerQueueActiveMgrPrivate::referenceCount < UINT_MAX );
@@ -52,7 +52,7 @@ epicsTimerQueueForC & timerQueueActiveMgr::allocate (
}
}
}
epicsTimerQueueForC *pQueue = new epicsTimerQueueForC ( okToShare, threadPriority );
epicsTimerQueueActiveForC *pQueue = new epicsTimerQueueActiveForC ( okToShare, threadPriority );
if ( ! pQueue ) {
throwWithLocation ( timer::noMemory () );
}
@@ -63,7 +63,7 @@ epicsTimerQueueForC & timerQueueActiveMgr::allocate (
return *pQueue;
}
void timerQueueActiveMgr::release ( epicsTimerQueueForC &queue )
void timerQueueActiveMgr::release ( epicsTimerQueueActiveForC &queue )
{
epicsAutoMutex locker ( this->mutex );
assert ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u );