This is Unofficial EPICS BASE Doxygen Site
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
epics::pvaClient::PvaClientMultiMonitorDouble Class Reference

Provides a monitor to multiple channels where each channel has a numeric scalar value field. More...

#include "pvaClientMultiChannel.h"

+ Inheritance diagram for epics::pvaClient::PvaClientMultiMonitorDouble:
+ Collaboration diagram for epics::pvaClient::PvaClientMultiMonitorDouble:

Public Member Functions

 POINTER_DEFINITIONS (PvaClientMultiMonitorDouble)
 
 ~PvaClientMultiMonitorDouble ()
 
void connect ()
 Connect a channel monitor for each channel. More...
 
bool poll ()
 Poll each channel. More...
 
bool waitEvent (double secondsToWait)
 Wait until poll returns true. More...
 
epics::pvData::shared_vector< double > get ()
 
PvaClientMultiMonitorDoublePtr getPtrSelf ()
 Monitor the shared pointer to self. More...
 

Static Public Member Functions

static PvaClientMultiMonitorDoublePtr create (PvaClientMultiChannelPtr const &pvaClientMultiChannel, PvaClientChannelArray const &pvaClientChannelArray)
 Create a PvaClientMultiMonitorDouble. More...
 

Detailed Description

Provides a monitor to multiple channels where each channel has a numeric scalar value field.

Definition at line 274 of file pvaClientMultiChannel.h.

Constructor & Destructor Documentation

epics::pvaClient::PvaClientMultiMonitorDouble::~PvaClientMultiMonitorDouble ( )

Definition at line 49 of file pvaClientMultiMonitorDouble.cpp.

50 {
51  if(PvaClient::getDebug()) cout<< "PvaClientMultiMonitorDouble::~PvaClientMultiMonitorDouble()\n";
52 }
static bool getDebug()
Is debug set?
Definition: pvaClient.cpp:97

Member Function Documentation

void epics::pvaClient::PvaClientMultiMonitorDouble::connect ( )

Connect a channel monitor for each channel.

Definition at line 54 of file pvaClientMultiMonitorDouble.cpp.

55 {
56  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
57  string request = "value";
58  for(size_t i=0; i<nchannel; ++i)
59  {
60  if(isConnected[i]) {
61  pvaClientMonitor[i] = pvaClientChannelArray[i]->createMonitor(request);
62  pvaClientMonitor[i]->issueConnect();
63  }
64  }
65  for(size_t i=0; i<nchannel; ++i)
66  {
67  if(isConnected[i]) {
68  Status status = pvaClientMonitor[i]->waitConnect();
69  if(status.isOK()) continue;
70  string message = string("channel ") + pvaClientChannelArray[i]->getChannelName()
71  + " PvaChannelMonitor::waitConnect " + status.getMessage();
72  throw std::runtime_error(message);
73  }
74  }
75  for(size_t i=0; i<nchannel; ++i)
76  {
77  if(isConnected[i]) pvaClientMonitor[i]->start();
78  }
79  isMonitorConnected = true;
80 }
std::string request
pvd::Status status
int i
Definition: scan.c:967
const std::string & getMessage() const
Definition: status.h:80
bool isOK() const
Definition: status.h:95
PvaClientMultiMonitorDoublePtr epics::pvaClient::PvaClientMultiMonitorDouble::create ( PvaClientMultiChannelPtr const &  pvaClientMultiChannel,
PvaClientChannelArray const &  pvaClientChannelArray 
)
static

Create a PvaClientMultiMonitorDouble.

Parameters
pvaClientMultiChannelThe interface to PvaClientMultiChannel.
pvaClientChannelArrayThe PvaClientChannel array.
Returns
The interface.

Definition at line 27 of file pvaClientMultiMonitorDouble.cpp.

30 {
31  PvaClientMultiMonitorDoublePtr pvaClientMultiMonitorDouble(
32  new PvaClientMultiMonitorDouble(pvaMultiChannel,pvaClientChannelArray));
33  return pvaClientMultiMonitorDouble;
34 }
std::tr1::shared_ptr< PvaClientMultiMonitorDouble > PvaClientMultiMonitorDoublePtr
epics::pvData::shared_vector< double > epics::pvaClient::PvaClientMultiMonitorDouble::get ( )

get the data.

Returns
The double[] where each element is the value field of the corresponding channel.

Definition at line 119 of file pvaClientMultiMonitorDouble.cpp.

120 {
121  return doubleValue;
122 }
PvaClientMultiMonitorDoublePtr epics::pvaClient::PvaClientMultiMonitorDouble::getPtrSelf ( )
inline

Monitor the shared pointer to self.

Returns
The shared pointer.

Definition at line 316 of file pvaClientMultiChannel.h.

317  {
318  return shared_from_this();
319  }
epics::pvaClient::PvaClientMultiMonitorDouble::POINTER_DEFINITIONS ( PvaClientMultiMonitorDouble  )
bool epics::pvaClient::PvaClientMultiMonitorDouble::poll ( )

Poll each channel.

If any has new data it is used to update the double[].

Returns
(false,true) if (no, at least one) value was updated.

Definition at line 82 of file pvaClientMultiMonitorDouble.cpp.

83 {
84  if(!isMonitorConnected){
85  connect();
86  epicsThreadSleep(.1);
87  }
88  bool result = false;
89  shared_vector<epics::pvData::boolean> isConnected = pvaClientMultiChannel->getIsConnected();
90  for(size_t i=0; i<nchannel; ++i)
91  {
92  if(isConnected[i]) {
93  if(pvaClientMonitor[i]->poll()) {
94  doubleValue[i] = pvaClientMonitor[i]->getData()->getDouble();
95  pvaClientMonitor[i]->releaseEvent();
96  result = true;
97  }
98  }
99  }
100  return result;
101 }
void connect()
Connect a channel monitor for each channel.
pvac::PutEvent result
Definition: clientSync.cpp:117
int i
Definition: scan.c:967
LIBCOM_API void epicsStdCall epicsThreadSleep(double seconds)
Block the calling thread for at least the specified time.
Definition: osdThread.c:790
bool epics::pvaClient::PvaClientMultiMonitorDouble::waitEvent ( double  secondsToWait)

Wait until poll returns true.

Parameters
secondsToWaitThe time to keep trying. A thread sleep of .1 seconds occurs between each call to poll.
Returns
(false,true) if (timeOut, poll returned true).

Definition at line 103 of file pvaClientMultiMonitorDouble.cpp.

104 {
105  if(poll()) return true;
106  TimeStamp start;
107  start.getCurrent();
108  TimeStamp now;
109  while(true) {
110  epicsThreadSleep(.1);
111  if(poll()) return true;
112  now.getCurrent();
113  double diff = TimeStamp::diff(now,start);
114  if(diff>=waitForEvent) break;
115  }
116  return false;
117 }
LIBCOM_API void epicsStdCall epicsThreadSleep(double seconds)
Block the calling thread for at least the specified time.
Definition: osdThread.c:790
Methods for manipulating timeStamp.
Definition: timeStamp.h:43

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