timer queue name changes
This commit is contained in:
@@ -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 ( ... ) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#define epicsExportSharedSymbols
|
||||
#include "timerPrivate.h"
|
||||
|
||||
epicsTimerQueue::~epicsTimerQueue () {}
|
||||
|
||||
timerQueue::timerQueue ( epicsTimerQueueNotify ¬ifyIn ) :
|
||||
notify ( notifyIn ), pExpireTmr ( 0 ),
|
||||
processThread ( 0 ), cancelPending ( false )
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user