improved internal class hierarchy

This commit is contained in:
Jeff Hill
2001-07-12 16:02:54 +00:00
parent 41a2ba5a9b
commit 1042e657c8
6 changed files with 28 additions and 32 deletions

View File

@@ -46,6 +46,7 @@ public:
class epicsTimer {
public:
virtual ~epicsTimer () = 0;
virtual void start ( epicsTimerNotify &, const epicsTime & ) = 0;
virtual void start ( epicsTimerNotify &, double delaySeconds ) = 0;
virtual void cancel () = 0;
@@ -58,26 +59,22 @@ public:
double getExpireDelay ();
virtual void show ( unsigned int level ) const = 0;
virtual class epicsTimerQueue & getQueue () const = 0;
protected:
virtual ~epicsTimer ();
};
class epicsTimerQueue {
public:
virtual ~epicsTimerQueue () = 0;
virtual epicsTimer & createTimer () = 0;
virtual void destroyTimer ( epicsTimer & ) = 0;
virtual void show ( unsigned int level ) const = 0;
protected:
virtual ~epicsTimerQueue () = 0;
};
class epicsTimerQueueActive : public epicsTimerQueue {
public:
virtual ~epicsTimerQueueActive () = 0;
static epicsShareFunc epicsTimerQueueActive & allocate (
bool okToShare, int threadPriority = epicsThreadPriorityMin + 10 );
virtual void release () = 0;
protected:
virtual ~epicsTimerQueueActive () = 0;
};
class epicsTimerQueueNotify {

View File

@@ -179,7 +179,7 @@ void timer::show ( unsigned int level ) const
epicsTimerQueue & timer::getQueue () const
{
return this->queue.getEpicsTimerQueue ();
return this->queue;
}
timerQueue & timer::getPrivTimerQueue()

View File

@@ -77,14 +77,14 @@ private:
friend class timerQueue;
};
class timerQueue {
class timerQueue : public epicsTimerQueue {
public:
timerQueue ( epicsTimerQueueNotify &notify );
virtual ~timerQueue ();
double process ( const epicsTime & currentTime );
epicsTimer & createTimer ();
void destroyTimer ( epicsTimer & );
void show ( unsigned int level ) const;
timer & createTimer ();
void destroyTimer ( timer & );
epicsTimerForC & createTimerForC ( epicsTimerCallback, void *pPrivateIn );
void destroyTimerForC ( epicsTimerForC & );
private:
@@ -97,7 +97,6 @@ private:
timer *pExpireTmr;
epicsThreadId processThread;
bool cancelPending;
virtual epicsTimerQueue & getEpicsTimerQueue () = 0;
friend class timer;
};
@@ -113,7 +112,7 @@ private:
class timerQueueActive : public epicsTimerQueueActive,
public epicsThreadRunable, public epicsTimerQueueNotify,
public timerQueueActiveMgrPrivate, private timerQueue {
public timerQueueActiveMgrPrivate {
public:
timerQueueActive ( bool okToShare, unsigned priority );
~timerQueueActive () = 0;
@@ -125,6 +124,7 @@ public:
epicsTimerForC & createTimerForC ( epicsTimerCallback, void *pPrivateIn );
void destroyTimerForC ( epicsTimerForC & );
private:
timerQueue queue;
epicsEvent rescheduleEvent;
epicsEvent exitEvent;
epicsThread thread;
@@ -163,8 +163,7 @@ private:
extern timerQueueActiveMgr queueMgr;
class timerQueuePassive : public epicsTimerQueuePassive,
private timerQueue {
class timerQueuePassive : public epicsTimerQueuePassive {
public:
timerQueuePassive ( epicsTimerQueueNotify & );
epicsTimer & createTimer ();
@@ -174,6 +173,7 @@ public:
epicsTimerForC & createTimerForC ( epicsTimerCallback, void *pPrivateIn );
void destroyTimerForC ( epicsTimerForC & );
protected:
timerQueue queue;
~timerQueuePassive ();
epicsTimerQueue & getEpicsTimerQueue ();
};

View File

@@ -153,7 +153,7 @@ double timerQueue::process ( const epicsTime & currentTime )
}
}
timer & timerQueue::createTimer ()
epicsTimer & timerQueue::createTimer ()
{
epicsAutoMutex autoLock ( this->mutex );
void *pBuf = this->timerFreeList.allocate ( sizeof (timer) );
@@ -163,10 +163,10 @@ timer & timerQueue::createTimer ()
return * new ( pBuf ) timer ( *this );
}
void timerQueue::destroyTimer ( timer & tmr )
void timerQueue::destroyTimer ( epicsTimer & tmr )
{
epicsAutoMutex autoLock ( this->mutex );
tmr.~timer ();
tmr.~epicsTimer ();
this->timerFreeList.release ( &tmr, sizeof( tmr ) );
}

View File

@@ -41,8 +41,7 @@ epicsTimerQueueActive &epicsTimerQueueActive::allocate ( bool okToShare, int thr
}
timerQueueActive::timerQueueActive ( bool okToShareIn, unsigned priority ) :
timerQueue ( static_cast <epicsTimerQueueNotify &> ( *this ) ),
thread ( *this, "epicsTimerQueueActive",
queue ( *this ), thread ( *this, "epicsTimerQueueActive",
epicsThreadGetStackSize ( epicsThreadStackMedium ), priority ),
okToShare ( okToShareIn ), exitFlag ( false ), terminateFlag ( false )
{
@@ -64,7 +63,7 @@ void timerQueueActive::run ()
{
this->exitFlag = false;
while ( ! this->terminateFlag ) {
double delay = this->timerQueue::process ( epicsTime::getCurrent() );
double delay = this->queue.process ( epicsTime::getCurrent() );
debugPrintf ( ( "timer thread sleeping for %g sec (max)\n", delay ) );
this->rescheduleEvent.wait ( delay );
}
@@ -74,23 +73,23 @@ void timerQueueActive::run ()
epicsTimer & timerQueueActive::createTimer ()
{
return this->timerQueue::createTimer ();
return this->queue.createTimer ();
}
void timerQueueActive::destroyTimer ( epicsTimer & et )
{
timer & tmr = dynamic_cast < timer & > ( et );
this->timerQueue::destroyTimer ( tmr );
this->queue.destroyTimer ( tmr );
}
epicsTimerForC & timerQueueActive::createTimerForC ( epicsTimerCallback pCB, void *pPrivateIn )
{
return this->timerQueue::createTimerForC ( pCB, pPrivateIn );
return this->queue.createTimerForC ( pCB, pPrivateIn );
}
void timerQueueActive::destroyTimerForC ( epicsTimerForC &tmr )
{
this->timerQueue::destroyTimerForC ( tmr );
this->queue.destroyTimerForC ( tmr );
}
void timerQueueActive::reschedule ()
@@ -103,7 +102,7 @@ void timerQueueActive::show ( unsigned int level ) const
printf ( "EPICS threaded timer queue at %p\n",
static_cast <const void *> ( this ) );
if ( level >=1u ) {
this->timerQueue::show ( level - 1u );
this->queue.show ( level - 1u );
printf ( "reschedule event\n" );
this->rescheduleEvent.show ( level - 1u );
printf ( "exit event\n" );

View File

@@ -51,34 +51,34 @@ epicsTimerQueuePassive &epicsTimerQueuePassive::create ( epicsTimerQueueNotify &
}
timerQueuePassive::timerQueuePassive ( epicsTimerQueueNotify &notifyIn ) :
timerQueue ( notifyIn ) {}
queue ( notifyIn ) {}
timerQueuePassive::~timerQueuePassive () {}
epicsTimer & timerQueuePassive::createTimer ()
{
return this->timerQueue::createTimer ();
return this->queue.createTimer ();
}
void timerQueuePassive::destroyTimer ( epicsTimer & et )
{
timer & tmr = dynamic_cast < timer & > ( et );
this->timerQueue::destroyTimer ( tmr );
this->queue.destroyTimer ( tmr );
}
epicsTimerForC & timerQueuePassive::createTimerForC ( epicsTimerCallback pCB, void *pPrivateIn )
{
return this->timerQueue::createTimerForC ( pCB, pPrivateIn );
return this->queue.createTimerForC ( pCB, pPrivateIn );
}
void timerQueuePassive::destroyTimerForC ( epicsTimerForC &tmr )
{
this->timerQueue::destroyTimerForC ( tmr );
this->queue.destroyTimerForC ( tmr );
}
double timerQueuePassive::process ( const epicsTime & currentTime )
{
return this->timerQueue::process ( currentTime );
return this->queue.process ( currentTime );
}
void timerQueuePassive::show ( unsigned int level ) const
@@ -86,7 +86,7 @@ void timerQueuePassive::show ( unsigned int level ) const
printf ( "EPICS non-threaded timer queue at %p\n",
static_cast <const void *> ( this ) );
if ( level >=1u ) {
this->timerQueue::show ( level - 1u );
this->queue.show ( level - 1u );
}
}