nidas  v1.2-1520
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
nidas::core::SampleSorter Class Reference

A SampleClient that sorts its received samples, using an STL multiset, and then sends the sorted samples onto its SampleClients. More...

#include <SampleSorter.h>

Inheritance diagram for nidas::core::SampleSorter:
Inheritance graph
[legend]

Public Types

enum  runStatus { RUN_CANCELED = -1, RUN_OK = 0, NOT_RUNNING = 1, RUN_EXCEPTION = 2 }
 Values that can be returned by run method. More...
 
enum  SchedPolicy { NU_THREAD_OTHER =SCHED_OTHER, NU_THREAD_FIFO =SCHED_FIFO, NU_THREAD_RR =SCHED_RR }
 

Public Member Functions

 SampleSorter (const std::string &name, bool raw)
 Constructor. More...
 
virtual ~SampleSorter ()
 
void setKeepStats (bool val)
 
bool getKeepStats () const
 
SampleSourcegetRawSampleSource ()
 Several objects in NIDAS can be both a SampleSource of raw Samples and processed Samples. More...
 
SampleSourcegetProcessedSampleSource ()
 Several objects in NIDAS can be both a SampleSource of raw Samples and processed Samples. More...
 
void addSampleTag (const SampleTag *tag) throw ()
 How to tell this SampleSorter what sample tags it will be sorting. More...
 
void removeSampleTag (const SampleTag *tag) throw ()
 
std::list< const SampleTag * > getSampleTags () const
 Implementation of SampleSource::getSampleTags(). More...
 
SampleTagIterator getSampleTagIterator () const
 Implementation of SampleSource::getSampleTagIterator(). More...
 
void addSampleClient (SampleClient *client) throw ()
 Implementation of SampleSource::addSampleClient(). More...
 
void removeSampleClient (SampleClient *client) throw ()
 Remove a SampleClient from this SampleSource. More...
 
void addSampleClientForTag (SampleClient *client, const SampleTag *tag) throw ()
 Add a Client for a given SampleTag. More...
 
void removeSampleClientForTag (SampleClient *client, const SampleTag *tag) throw ()
 Remove a SampleClient for a given SampleTag from this SampleSource. More...
 
int getClientCount () const throw ()
 How many SampleClients are currently in my list. More...
 
const SampleStatsgetSampleStats () const
 
void flush () throw ()
 Implementation of SampleSource::flush(). More...
 
void interrupt ()
 Interrupt sorting thread. More...
 
bool receive (const Sample *s) throw ()
 Implementation of SampleClient::receive(). More...
 
size_t size () const
 Current number of samples in the sorter. More...
 
void setLengthSecs (float val)
 
float getLengthSecs () const
 
void setHeapMax (size_t val)
 Set the maximum amount of heap memory to use for sorting samples. More...
 
size_t getHeapMax () const
 
size_t getHeapSize () const
 Get the current amount of heap being used for sorting. More...
 
void setHeapBlock (bool val)
 
bool getHeapBlock () const
 
size_t getNumDiscardedSamples () const
 Number of samples discarded because of _heapSize > _heapMax and heapBlock == true. More...
 
size_t getNumFutureSamples () const
 Number of samples discarded because their timetags were in the future. More...
 
size_t getNumEarlySamples () const
 Number of early samples, which may not be sorted. More...
 
void setRealTime (bool val)
 Is this sorter running in real-time? If so then we can screen for bad time-tags by checking against the system clock, which is trusted. More...
 
bool getRealTime () const
 
void setLateSampleCacheSize (unsigned int val)
 When aging-off samples, cache this number of samples with the latest time tags. More...
 
unsigned int getLateSampleCacheSize () const
 
virtual void start () throw (Exception)
 Start the thread running, meaning execute the run method in a separate thread. More...
 
virtual int join () throw (Exception)
 The calling thread joins this thread, waiting until the thread finishes, which means either that the run() method returned, the thread called pthread_exit() or the thread was cancelled. More...
 
virtual void kill (int sig) throw (Exception)
 Send a signal to this thread. More...
 
virtual void cancel () throw (Exception)
 Cancel this thread. More...
 
virtual bool isInterrupted () const
 Return true when this thread has been interrupted. More...
 
virtual bool isRunning () const
 Is this thread running? More...
 
virtual bool isJoined () const
 Has this thread been joined? More...
 
virtual bool isDetached () const
 Is this a detached thread. More...
 
bool isCancelEnabled () const
 Return true if the cancel state of this thread is PTHREAD_CANCEL_ENABLE. More...
 
bool isCancelDeferred () const
 Return true if the cancel type of this thread is PTHREAD_CANCEL_DEFERRED. More...
 
const std::string & getName () const throw ()
 Return the name of this thread. More...
 
const std::string & getFullName () throw ()
 Return a name with a bunch of descriptive fields, specifying whether it is detached, the real-time priority, etc. More...
 
bool setRealTimeRoundRobinPriority (int val) throw (Exception)
 
bool setRealTimeFIFOPriority (int val) throw (Exception)
 
bool setNonRealTimePriority () throw (Exception)
 
void setThreadScheduler (enum SchedPolicy policy, int priority) throw (Exception)
 
void blockSignal (int)
 Block a signal in this thread. More...
 
void unblockSignal (int)
 Install a signal handler and unblock the signal. More...
 

Static Public Member Functions

static ThreadcurrentThread ()
 Return the thread object for the current thread. More...
 
static pthread_t currentThreadId ()
 
static ThreadlookupThread (pthread_t id)
 
static const std::string & currentName ()
 Convenience routine to return the name for the current thread, or a string indicating that the name of the thread is unknown. More...
 
static std::string getPolicyString (int policy)
 Convenience function to return a string for the given scheduler policy: "Non-RT", "RT:FIFO", "RT:RR" or "RT:Unknown". More...
 
static int test (int argc, char **argv)
 a test method. More...
 

Protected Member Functions

void setCancelEnabled (bool val)
 Set the cancel state for this thread - false means cancel requests are ignored. More...
 
void setCancelDeferred (bool val)
 Set the cancel type for this thread. More...
 
pthread_t getId () const
 
void testCancel () const
 Check if we have been cancelled. More...
 
virtual bool amInterrupted () const
 Call testCancel, and return true when this thread has been interrupted. More...
 

Private Member Functions

int run () throw (nidas::util::Exception)
 Thread run function. More...
 
void heapDecrement (size_t bytes)
 Utility function to decrement the heap size after writing one or more samples. More...
 
 SampleSorter (const SampleSorter &)
 No copy. More...
 
SampleSorteroperator= (const SampleSorter &)
 No assignment. More...
 

Private Attributes

SampleSourceSupport _source
 
unsigned int _sorterLengthUsec
 Length of SampleSorter, in micro-seconds. More...
 
SortedSampleSet _samples
 
nidas::util::Cond _sampleSetCond
 
nidas::util::Cond _flushCond
 
size_t _heapMax
 Limit on the maximum size of memory to use while buffering samples. More...
 
size_t _heapSize
 Current heap size, in bytes. More...
 
bool _heapBlock
 _heapBlock controls what happens when the number of bytes in _samples exceeds _heapMax. More...
 
nidas::util::Cond _heapCond
 
bool _heapExceeded
 
unsigned int _discardedSamples
 Number of samples discarded because of _heapSize > _heapMax and heapBlock == true. More...
 
unsigned int _realTimeFutureSamples
 Number of samples discarded because getRealTime() is true and the samples have timetags later than the system clock. More...
 
unsigned int _earlySamples
 Samples which are earlier than the current latest sample in the sorter minus the sorter length. More...
 
int _discardWarningCount
 How often to log warnings about discardedSamples. More...
 
int _earlyWarningCount
 How often to log warnings about early samples. More...
 
bool _doFlush
 
bool _flushed
 
SampleT< char > _dummy
 
bool _realTime
 Is this sorter running in real-time? If so then we can screen for bad time-tags by checking against the system clock, which is trusted. More...
 
long long _maxSorterLengthUsec
 
unsigned int _lateSampleCacheSize
 

Detailed Description

A SampleClient that sorts its received samples, using an STL multiset, and then sends the sorted samples onto its SampleClients.

The time period of the sorting is specified with setLengthSecs(). Samples whose time-tags are previous to the time-tag of the latest sample received minus the sorter length, are sent on to the SampleClients. This is implemented as a Thread, which must be started, otherwise the sorter will grow and no samples will be sent to clients. This can be a client of multiple SampleSources, so that the distributed samples are sorted in time.

Member Enumeration Documentation

Values that can be returned by run method.

User can define other values greater than RUN_EXCEPTION. These values are then returned by int join(). Note that PTHREAD_CANCELLED is -1

Enumerator
RUN_CANCELED 
RUN_OK 
NOT_RUNNING 
RUN_EXCEPTION 
Enumerator
NU_THREAD_OTHER 
NU_THREAD_FIFO 
NU_THREAD_RR 

Constructor & Destructor Documentation

SampleSorter::SampleSorter ( const std::string &  name,
bool  raw 
)

Constructor.

@ param raw: boolean indicating whether this SampleSorter is for raw or processed samples. Clients can query this value, and it controls what is returned by getRawSampleSource() and getProcessedSampleSource().

References _discardWarningCount, _earlyWarningCount, nidas::util::LogScheme::getParameterT(), and nidas::util::Logger::getScheme().

SampleSorter::~SampleSorter ( )
virtual
nidas::core::SampleSorter::SampleSorter ( const SampleSorter )
private

No copy.

Member Function Documentation

void nidas::core::SampleSorter::addSampleClient ( SampleClient client)
throw (
)
inlinevirtual
void nidas::core::SampleSorter::addSampleClientForTag ( SampleClient client,
const SampleTag tag 
)
throw (
)
inlinevirtual
void nidas::core::SampleSorter::addSampleTag ( const SampleTag tag)
throw (
)
inlinevirtual

How to tell this SampleSorter what sample tags it will be sorting.

SampleClients can then query it.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::addSampleTag().

bool Runnable::amInterrupted ( ) const
protectedvirtualinherited

Call testCancel, and return true when this thread has been interrupted.

This is protected because it should only called within the run method of the thread.

Referenced by nidas::core::SampleOutputRequestThread::run(), nidas::core::Looper::run(), nidas::dynld::isff::GOESOutput::run(), nidas::core::DSMServerStat::run(), and nidas::util::Thread::test().

void Thread::blockSignal ( int  sig)
inherited
void Thread::cancel ( )
throw (Exception
)
virtualinherited
static const std::string& nidas::util::Thread::currentName ( )
inlinestaticinherited

Convenience routine to return the name for the current thread, or a string indicating that the name of the thread is unknown.

References nidas::util::Thread::currentThread(), nidas::util::Thread::getName(), and nidas::util::Thread::unknownName.

Referenced by nidas::util::Logger::msg_locked().

Thread * Thread::currentThread ( )
staticinherited

Return the thread object for the current thread.

Returns null if not found.

Referenced by nidas::util::Thread::blockSignal(), nidas::util::Thread::currentName(), and nidas::util::Thread::unblockSignal().

pthread_t Thread::currentThreadId ( )
staticinherited
void SampleSorter::flush ( )
throw (
)
virtual

Implementation of SampleSource::flush().

distribute all buffered samples to SampleClients.

flush all samples from buffer, distributing them to SampleClients. The first caller will block until the buffer is empty.

Implements nidas::core::SampleThread.

References _doFlush, _flushCond, _flushed, _samples, _sampleSetCond, _source, DLOG, nidas::core::SampleSourceSupport::getRawSampleSource(), nidas::util::Thread::isInterrupted(), nidas::util::Cond::lock(), nidas::util::Cond::signal(), nidas::util::Cond::unlock(), nidas::util::Cond::wait(), and WLOG.

int nidas::core::SampleSorter::getClientCount ( ) const
throw (
)
inlinevirtual

How many SampleClients are currently in my list.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::getClientCount().

const std::string & Thread::getFullName ( )
throw (
)
inherited

Return a name with a bunch of descriptive fields, specifying whether it is detached, the real-time priority, etc.

References nidas::util::Thread::_fullname.

Referenced by nidas::util::Thread::pRun(), nidas::util::Thread::test(), nidas::util::Thread::thr_cleanup(), and nidas::util::Thread::thr_cleanup_delete().

bool nidas::core::SampleSorter::getHeapBlock ( ) const
inlinevirtual

Implements nidas::core::SampleThread.

References _heapBlock.

size_t nidas::core::SampleSorter::getHeapMax ( ) const
inlinevirtual

Implements nidas::core::SampleThread.

References _heapMax.

size_t nidas::core::SampleSorter::getHeapSize ( ) const
inlinevirtual

Get the current amount of heap being used for sorting.

Implements nidas::core::SampleThread.

References _heapSize.

pthread_t nidas::util::Thread::getId ( ) const
inlineprotectedinherited
bool nidas::core::SampleSorter::getKeepStats ( ) const
inlinevirtual
unsigned int nidas::core::SampleSorter::getLateSampleCacheSize ( ) const
inlinevirtual
float nidas::core::SampleSorter::getLengthSecs ( ) const
inlinevirtual
const std::string & Thread::getName ( ) const
throw (
)
inherited
size_t nidas::core::SampleSorter::getNumDiscardedSamples ( ) const
inlinevirtual

Number of samples discarded because of _heapSize > _heapMax and heapBlock == true.

Implements nidas::core::SampleThread.

References _discardedSamples.

size_t nidas::core::SampleSorter::getNumEarlySamples ( ) const
inline

Number of early samples, which may not be sorted.

References _earlySamples.

size_t nidas::core::SampleSorter::getNumFutureSamples ( ) const
inlinevirtual

Number of samples discarded because their timetags were in the future.

Implements nidas::core::SampleThread.

References _realTimeFutureSamples.

string Thread::getPolicyString ( int  policy)
staticinherited

Convenience function to return a string for the given scheduler policy: "Non-RT", "RT:FIFO", "RT:RR" or "RT:Unknown".

References nidas::util::Thread::NU_THREAD_FIFO, nidas::util::Thread::NU_THREAD_OTHER, and nidas::util::Thread::NU_THREAD_RR.

Referenced by nidas::core::DSMSensor::getLooper(), and nidas::util::Thread::makeFullName().

SampleSource* nidas::core::SampleSorter::getProcessedSampleSource ( )
inlinevirtual

Several objects in NIDAS can be both a SampleSource of raw Samples and processed Samples.

SampleClients use this method to get a pointer to whatever sample source they are interested in. Derived classes can return NULL if they are not a SampleSource of processed samples.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::getProcessedSampleSource().

SampleSource* nidas::core::SampleSorter::getRawSampleSource ( )
inlinevirtual

Several objects in NIDAS can be both a SampleSource of raw Samples and processed Samples.

SampleClients use this method to get a pointer to whatever sample source they are interested in. Derived classes can return NULL if they are not a SampleSource of raw samples.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::getRawSampleSource().

bool nidas::core::SampleSorter::getRealTime ( ) const
inlinevirtual

Implements nidas::core::SampleThread.

References _realTime.

const SampleStats& nidas::core::SampleSorter::getSampleStats ( ) const
inlinevirtual
SampleTagIterator nidas::core::SampleSorter::getSampleTagIterator ( ) const
inlinevirtual
std::list<const SampleTag*> nidas::core::SampleSorter::getSampleTags ( ) const
inlinevirtual
void SampleSorter::heapDecrement ( size_t  bytes)
private

Utility function to decrement the heap size after writing one or more samples.

If the heapSize has has shrunk below heapMax then signal any threads waiting on heapCond.

References _heapBlock, _heapCond, _heapExceeded, _heapMax, _heapSize, DLOG, nidas::util::Thread::getName(), nidas::util::Cond::lock(), nidas::util::Cond::signal(), and nidas::util::Cond::unlock().

Referenced by run().

void SampleSorter::interrupt ( )
virtual
bool Thread::isCancelDeferred ( ) const
inherited

Return true if the cancel type of this thread is PTHREAD_CANCEL_DEFERRED.

References nidas::util::Thread::_cancel_deferred.

bool Thread::isCancelEnabled ( ) const
inherited

Return true if the cancel state of this thread is PTHREAD_CANCEL_ENABLE.

References nidas::util::Thread::_cancel_enabled.

virtual bool nidas::util::Thread::isDetached ( ) const
inlinevirtualinherited

Is this a detached thread.

References nidas::util::Thread::_detached.

virtual bool nidas::util::Thread::isInterrupted ( ) const
inlinevirtualinherited
virtual bool nidas::util::Thread::isJoined ( ) const
inlinevirtualinherited
virtual bool nidas::util::Thread::isRunning ( ) const
inlinevirtualinherited
int Thread::join ( )
throw (Exception
)
virtualinherited

The calling thread joins this thread, waiting until the thread finishes, which means either that the run() method returned, the thread called pthread_exit() or the thread was cancelled.

The return value is the int return value of the run method, or PTHREAD_CANCELED (-1). If the run method threw an Exception, it will be caught and then re-thrown by join.

Reimplemented in nidas::core::SensorHandler.

References nidas::util::Thread::_exception, nidas::util::Thread::_id, nidas::util::Thread::_mutex, nidas::util::Exception::errnoToString(), nidas::util::Thread::getId(), nidas::util::Thread::getName(), nidas::util::Thread::RUN_EXCEPTION, and nidas::util::Thread::RUN_OK.

Referenced by nidas::core::DSMService::checkSubThreads(), nidas::dynld::UDPSampleOutput::XMLSocketListener::checkWorkers(), nidas::dynld::UDPSampleOutput::close(), nidas::util::McSocketListener::close(), nidas::core::DerivedDataReader::deleteInstance(), nidas::dynld::UDPSampleOutput::XMLSocketListener::fireWorkers(), nidas::core::DSMService::join(), nidas::core::SensorHandler::join(), nidas::core::SamplePipeline::join(), nidas::core::DSMEngine::joinDataThreads(), nidas::dynld::isff::GOESOutput::joinThread(), nidas::core::DSMServerApp::killStatusThread(), nidas::core::DSMServerApp::killXmlRpcThread(), nidas::core::DSMEngine::killXmlRpcThread(), main(), nidas::core::Looper::removeClient(), nidas::util::ThreadJoiner::run(), nidas::core::SampleBuffer::~SampleBuffer(), ~SampleSorter(), nidas::core::ServerSocket::~ServerSocket(), and nidas::dynld::UDPSampleOutput::~UDPSampleOutput().

void Thread::kill ( int  sig)
throw (Exception
)
virtualinherited
Thread * Thread::lookupThread ( pthread_t  id)
staticinherited
SampleSorter& nidas::core::SampleSorter::operator= ( const SampleSorter )
private

No assignment.

bool SampleSorter::receive ( const Sample s)
throw (
)
virtual
void nidas::core::SampleSorter::removeSampleClient ( SampleClient c)
throw (
)
inlinevirtual
void nidas::core::SampleSorter::removeSampleClientForTag ( SampleClient c,
const SampleTag  
)
throw (
)
inlinevirtual

Remove a SampleClient for a given SampleTag from this SampleSource.

The pointer to the SampleClient must remain valid, until after it is removed.

Implements nidas::core::SampleSource.

References _source, and nidas::core::SampleSourceSupport::removeSampleClientForTag().

void nidas::core::SampleSorter::removeSampleTag ( const SampleTag tag)
throw (
)
inlinevirtual
int SampleSorter::run ( )
throw (nidas::util::Exception
)
privatevirtual
void Thread::setCancelDeferred ( bool  val)
protectedinherited

Set the cancel type for this thread.

true means cancel requests are deferred until the next cancellation point. false means they occur instantly. This is protected, it should be called only from a thread's own run method. See the pthreads(7) man page for a list of the cancellation points.

Note: non-deferred canceling is difficult to get right. It has not been tested with this class, and is not recommended.

References nidas::util::Thread::_cancel_deferred.

void Thread::setCancelEnabled ( bool  val)
protectedinherited

Set the cancel state for this thread - false means cancel requests are ignored.

See pthread_setcancelstate. This is protected, it should be called only from a thread's own run method.

References nidas::util::Thread::_cancel_enabled.

void nidas::core::SampleSorter::setHeapBlock ( bool  val)
inlinevirtual
Parameters
valIf true, and heapSize exceeds heapMax, then wait for heapSize to be less then heapMax, which will block any SampleSources that are inserting samples into this sorter. If false, then discard any samples that are received while heapSize exceeds heapMax.

Implements nidas::core::SampleThread.

References _heapBlock.

void nidas::core::SampleSorter::setHeapMax ( size_t  val)
inlinevirtual

Set the maximum amount of heap memory to use for sorting samples.

Parameters
valMaximum size of heap in bytes.

Implements nidas::core::SampleThread.

References _heapMax.

void nidas::core::SampleSorter::setKeepStats ( bool  val)
inlinevirtual
void nidas::core::SampleSorter::setLateSampleCacheSize ( unsigned int  val)
inlinevirtual

When aging-off samples, cache this number of samples with the latest time tags.

This number, or fewer, of samples with anomalous, late, time tags will not effect the sorting. If the late sample cache size is zero, a jump ahead in time greater than the length of the sorter in seconds will cause the sorter to be emptied and the sorting effectively disabled until samples within the sorter length of the bad sample are encountered.

Implements nidas::core::SampleThread.

References _lateSampleCacheSize.

void nidas::core::SampleSorter::setLengthSecs ( float  val)
inlinevirtual
bool Thread::setNonRealTimePriority ( )
throw (Exception
)
inherited
void nidas::core::SampleSorter::setRealTime ( bool  val)
inlinevirtual

Is this sorter running in real-time? If so then we can screen for bad time-tags by checking against the system clock, which is trusted.

Implements nidas::core::SampleThread.

References _realTime.

bool Thread::setRealTimeFIFOPriority ( int  val)
throw (Exception
)
inherited
bool Thread::setRealTimeRoundRobinPriority ( int  val)
throw (Exception
)
inherited
void Thread::setThreadScheduler ( enum SchedPolicy  policy,
int  priority 
)
throw (Exception
)
inherited
size_t nidas::core::SampleSorter::size ( ) const
inlinevirtual

Current number of samples in the sorter.

This method does not hold a lock to force exclusive access to the sample container. Therefore this is only an instantaneous check and shouldn't be used by methods in this class when exclusive access is required.

Implements nidas::core::SampleThread.

References _samples.

Referenced by run().

void Thread::start ( )
throw (Exception
)
virtualinherited
int Thread::test ( int  argc,
char **  argv 
)
staticinherited
void nidas::util::Runnable::testCancel ( ) const
inlineprotectedinherited

Check if we have been cancelled.

Calls pthread_testcancel. This is protected since it only checks the current thread - i.e. it must be called within the run method. Since it just calls pthread_testcancel, it is a cancellation point.

void Thread::unblockSignal ( int  sig)
inherited

Install a signal handler and unblock the signal.

The signal handler will log a message about the receipt of the signal at severity LOG_INFO using the nidas::util::Logger. Then, if the signal handler is being invoked from a registered Thread, the virtual method signalHandler() for that Thread will be called.

The signal handler is installed with the sigaction() system call, and will be the action for the given signal in all threads, including the main() thread. If other threads do not wish to take action on a given signal, they should call blockSignal(sig). Or they can define their own signalHandler() method.

After installing the signal handler, the signal is added to those that are unblocked for the thread, or if the Thread is not yet running, the signal will be unblocked in the thread once it runs.

As with blockSignal(), this method is typically called on this Thread before it has started. If this Thread has started, then the signal will only be unblocked if the method is called from this Thread, i.e. from its own run() method.

To install a signal handler, and then block the signal so that it is held as pending until it is later unblocked, typically with pselect(), or sigwaitinfo(), do:

void Thread::run()
{
// get the existing signal mask
sigset_t sigmask;
pthread_sigmask(SIG_BLOCK,NULL,&sigmask);
// remove SIGUSR1 from the mask passed to pselect
sigdelset(&sigmask,SIGUSR1);
for (;;) {
pselect(nfd,&readfds,0,0,0,&sigmask);
...
}
}
...
thread.unblockSignal(SIGUSR1);
thread.blockSignal(SIGUSR1);
thread.start();
...
try {
if (thread.isRunning()) {
thread.kill(SIGUSR1);
thread.join()
}
}

References nidas::util::Thread::_blockedSignals, nidas::util::Thread::_unblockedSignals, nidas::util::Thread::currentThread(), nidas::util::Thread::isRunning(), and nidas::util::Thread::thr_add_sig().

Referenced by nidas::core::DerivedDataReader::DerivedDataReader(), nidas::core::FsMountWorkerThread::FsMountWorkerThread(), nidas::core::StatusListener::StatusListener(), nidas::core::StatusThread::StatusThread(), nidas::dynld::XMLConfigService::Worker::Worker(), nidas::core::XmlRpcThread::XmlRpcThread(), and nidas::dynld::UDPSampleOutput::XMLSocketListener::XMLSocketListener().

Member Data Documentation

unsigned int nidas::core::SampleSorter::_discardedSamples
private

Number of samples discarded because of _heapSize > _heapMax and heapBlock == true.

Referenced by getNumDiscardedSamples(), and ~SampleSorter().

int nidas::core::SampleSorter::_discardWarningCount
private

How often to log warnings about discardedSamples.

Referenced by SampleSorter().

bool nidas::core::SampleSorter::_doFlush
private

Referenced by flush(), and run().

SampleT<char> nidas::core::SampleSorter::_dummy
private

Referenced by run().

unsigned int nidas::core::SampleSorter::_earlySamples
private

Samples which are earlier than the current latest sample in the sorter minus the sorter length.

These samples have arrived too late to be necessarily sorted. They may or may not be sorted, depending on how often the sorting buffer is read.

Referenced by getNumEarlySamples(), and ~SampleSorter().

int nidas::core::SampleSorter::_earlyWarningCount
private

How often to log warnings about early samples.

Referenced by SampleSorter().

nidas::util::Cond nidas::core::SampleSorter::_flushCond
private

Referenced by flush(), interrupt(), and run().

bool nidas::core::SampleSorter::_flushed
private

Referenced by flush(), and run().

bool nidas::core::SampleSorter::_heapBlock
private

_heapBlock controls what happens when the number of bytes in _samples exceeds _heapMax.

If _heapBlock is true and _heapSize exceeds _heapMax, then any threads which are calling SampleSorter::receive to insert a sample to this sorter will block on _heapCond until sample consumers have reduced _heapSize to less than _heapMax. If _heapBlock is false and _heapSize exceeds _heapMax then samples are discarded until _heapSize is less than _heapMax.

Referenced by getHeapBlock(), heapDecrement(), run(), and setHeapBlock().

nidas::util::Cond nidas::core::SampleSorter::_heapCond
private

Referenced by heapDecrement(), interrupt(), and run().

bool nidas::core::SampleSorter::_heapExceeded
private

Referenced by heapDecrement(), interrupt(), and run().

size_t nidas::core::SampleSorter::_heapMax
private

Limit on the maximum size of memory to use while buffering samples.

Referenced by getHeapMax(), heapDecrement(), interrupt(), run(), and setHeapMax().

size_t nidas::core::SampleSorter::_heapSize
private

Current heap size, in bytes.

Referenced by getHeapSize(), heapDecrement(), and interrupt().

unsigned int nidas::core::SampleSorter::_lateSampleCacheSize
private
long long nidas::core::SampleSorter::_maxSorterLengthUsec
private

Referenced by run(), and ~SampleSorter().

bool nidas::core::SampleSorter::_realTime
private

Is this sorter running in real-time? If so then we can screen for bad time-tags by checking against the system clock, which is trusted.

Referenced by getRealTime(), and setRealTime().

unsigned int nidas::core::SampleSorter::_realTimeFutureSamples
private

Number of samples discarded because getRealTime() is true and the samples have timetags later than the system clock.

Referenced by getNumFutureSamples().

SortedSampleSet nidas::core::SampleSorter::_samples
private

Referenced by flush(), run(), size(), and ~SampleSorter().

nidas::util::Cond nidas::core::SampleSorter::_sampleSetCond
private

Referenced by flush(), interrupt(), and run().

unsigned int nidas::core::SampleSorter::_sorterLengthUsec
private

Length of SampleSorter, in micro-seconds.

Referenced by getLengthSecs(), run(), setLengthSecs(), and ~SampleSorter().

SampleSourceSupport nidas::core::SampleSorter::_source
private

The documentation for this class was generated from the following files: