13 #include <epicsMath.h> 15 #define epicsExportSharedSymbols 24 namespace epics {
namespace pvaClient {
33 return pvaClientMultiMonitorDouble;
36 PvaClientMultiMonitorDouble::PvaClientMultiMonitorDouble(
39 : pvaClientMultiChannel(pvaClientMultiChannel),
40 pvaClientChannelArray(pvaClientChannelArray),
41 nchannel(pvaClientChannelArray.
size()),
44 isMonitorConnected(
false)
46 if(PvaClient::getDebug()) cout<<
"PvaClientMultiMonitorDouble::PvaClientMultiMonitorDouble()\n";
49 PvaClientMultiMonitorDouble::~PvaClientMultiMonitorDouble()
51 if(PvaClient::getDebug()) cout<<
"PvaClientMultiMonitorDouble::~PvaClientMultiMonitorDouble()\n";
54 void PvaClientMultiMonitorDouble::connect()
58 for(
size_t i=0;
i<nchannel; ++
i)
61 pvaClientMonitor[
i] = pvaClientChannelArray[
i]->createMonitor(request);
62 pvaClientMonitor[
i]->issueConnect();
65 for(
size_t i=0;
i<nchannel; ++
i)
69 if(status.
isOK())
continue;
70 string message = string(
"channel ") + pvaClientChannelArray[
i]->getChannelName()
71 +
" PvaChannelMonitor::waitConnect " + status.
getMessage();
72 throw std::runtime_error(message);
75 for(
size_t i=0;
i<nchannel; ++
i)
77 if(isConnected[
i]) pvaClientMonitor[
i]->start();
79 isMonitorConnected =
true;
82 bool PvaClientMultiMonitorDouble::poll()
84 if(!isMonitorConnected){
90 for(
size_t i=0;
i<nchannel; ++
i)
93 if(pvaClientMonitor[i]->poll()) {
94 doubleValue[
i] = pvaClientMonitor[
i]->getData()->getDouble();
95 pvaClientMonitor[
i]->releaseEvent();
103 bool PvaClientMultiMonitorDouble::waitEvent(
double waitForEvent)
105 if(poll())
return true;
111 if(poll())
return true;
114 if(diff>=waitForEvent)
break;
TODO only here because of the Lockable.
const std::string & getMessage() const
size_t size() const
Number of elements visible through this vector.
std::tr1::shared_ptr< PvaClientMultiMonitorDouble > PvaClientMultiMonitorDoublePtr
Provides a monitor to multiple channels where each channel has a numeric scalar value field...
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr
static double diff(TimeStamp const &a, TimeStamp const &b)
LIBCOM_API void epicsStdCall epicsThreadSleep(double seconds)
Block the calling thread for at least the specified time.
C++ and C descriptions for a thread.
std::tr1::shared_ptr< PvaClientMonitor > PvaClientMonitorPtr
Methods for manipulating timeStamp.