This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::ca::CACMonitorQueue Class Reference
+ Inheritance diagram for epics::pvAccess::ca::CACMonitorQueue:
+ Collaboration diagram for epics::pvAccess::ca::CACMonitorQueue:

Public Member Functions

 POINTER_DEFINITIONS (CACMonitorQueue)
 
 CACMonitorQueue (int32 queueSize)
 
 ~CACMonitorQueue ()
 
void start ()
 
void stop ()
 
bool event (const PVStructurePtr &pvStructure, const MonitorElementPtr &activeElement)
 
MonitorElementPtr poll ()
 
void release (MonitorElementPtr const &monitorElement)
 

Detailed Description

Definition at line 747 of file caChannel.cpp.

Constructor & Destructor Documentation

epics::pvAccess::ca::CACMonitorQueue::CACMonitorQueue ( int32  queueSize)
inline

Definition at line 759 of file caChannel.cpp.

761  : queueSize(queueSize),
762  isStarted(false)
763  {}
epics::pvAccess::ca::CACMonitorQueue::~CACMonitorQueue ( )
inline

Definition at line 764 of file caChannel.cpp.

765  {
766  }

Member Function Documentation

bool epics::pvAccess::ca::CACMonitorQueue::event ( const PVStructurePtr pvStructure,
const MonitorElementPtr activeElement 
)
inline

Definition at line 780 of file caChannel.cpp.

783  {
784  Lock guard(mutex);
785  if(!isStarted) return false;
786  if(monitorElementQueue.size()==queueSize) return false;
787  PVStructure::shared_pointer pvs =
788  getPVDataCreate()->createPVStructure(pvStructure);
789  MonitorElementPtr monitorElement(new MonitorElement(pvs));
790  *(monitorElement->changedBitSet) = *(activeElement->changedBitSet);
791  *(monitorElement->overrunBitSet) = *(activeElement->overrunBitSet);
792  monitorElementQueue.push(monitorElement);
793  return true;
794  }
A lock for multithreading.
Definition: lock.h:36
An element for a monitorQueue.
Definition: monitor.h:54
std::tr1::shared_ptr< MonitorElement > MonitorElementPtr
Definition: monitor.h:40
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
Definition: pvData.h:1648
epics::pvAccess::ca::CACMonitorQueue::POINTER_DEFINITIONS ( CACMonitorQueue  )
MonitorElementPtr epics::pvAccess::ca::CACMonitorQueue::poll ( )
inline

Definition at line 795 of file caChannel.cpp.

796  {
797  Lock guard(mutex);
798  if(!isStarted) return MonitorElementPtr();
799  if(monitorElementQueue.empty()) return MonitorElementPtr();
800  MonitorElementPtr retval = monitorElementQueue.front();
801  return retval;
802  }
A lock for multithreading.
Definition: lock.h:36
std::tr1::shared_ptr< MonitorElement > MonitorElementPtr
Definition: monitor.h:40
void epics::pvAccess::ca::CACMonitorQueue::release ( MonitorElementPtr const &  monitorElement)
inline

Definition at line 803 of file caChannel.cpp.

804  {
805  Lock guard(mutex);
806  if(!isStarted) return;
807  if(monitorElementQueue.empty()) {
808  string mess("CAChannelMonitor::release client error calling release ");
809  throw std::runtime_error(mess);
810  }
811  monitorElementQueue.pop();
812  }
A lock for multithreading.
Definition: lock.h:36
void epics::pvAccess::ca::CACMonitorQueue::start ( )
inline

Definition at line 767 of file caChannel.cpp.

768  {
769  Lock guard(mutex);
770  while(!monitorElementQueue.empty()) monitorElementQueue.pop();
771  isStarted = true;
772  }
A lock for multithreading.
Definition: lock.h:36
void epics::pvAccess::ca::CACMonitorQueue::stop ( )
inline

Definition at line 773 of file caChannel.cpp.

774  {
775  Lock guard(mutex);
776  while(!monitorElementQueue.empty()) monitorElementQueue.pop();
777  isStarted = false;
778  }
A lock for multithreading.
Definition: lock.h:36

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