12 #include <epicsMath.h> 14 #define epicsExportSharedSymbols 23 namespace epics {
namespace pvaClient {
34 return pvaClientNTMultiGet;
37 PvaClientNTMultiGet::PvaClientNTMultiGet(
42 : pvaClientMultiChannel(pvaClientMultiChannel),
43 pvaClientChannelArray(pvaClientChannelArray),
45 nchannel(pvaClientChannelArray.
size()),
47 PvaClientNTMultiData::create(
49 pvaClientMultiChannel,
50 pvaClientChannelArray,
54 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiGet::PvaClientNTMultiGet()\n";
57 PvaClientNTMultiGet::~PvaClientNTMultiGet()
59 if(PvaClient::getDebug()) cout<<
"PvaClientNTMultiGet::~PvaClientNTMultiGet()\n";
62 void PvaClientNTMultiGet::connect()
64 pvaClientGet.
resize(nchannel);
66 for(
size_t i=0;
i<nchannel; ++
i)
69 pvaClientGet[
i] = pvaClientChannelArray[
i]->createGet(pvRequest);
70 pvaClientGet[
i]->issueConnect();
73 for(
size_t i=0;
i<nchannel; ++
i)
77 if(status.
isOK())
continue;
78 string message = string(
"channel ") +pvaClientChannelArray[
i]->getChannelName()
79 +
" PvaChannelGet::waitConnect " + status.
getMessage();
80 throw std::runtime_error(message);
83 this->isConnected =
true;
88 if(!isConnected) connect();
91 for(
size_t i=0;
i<nchannel; ++
i)
94 pvaClientGet[
i]->issueGet();
97 for(
size_t i=0;
i<nchannel; ++
i)
101 if(status.
isOK())
continue;
102 string message = string(
"channel ") +pvaClientChannelArray[
i]->getChannelName()
103 +
" PvaChannelGet::waitGet " + status.
getMessage();
104 throw std::runtime_error(message);
107 pvaClientNTMultiData->startDeltaTime();
108 for(
size_t i=0;
i<nchannel; ++
i)
111 pvaClientNTMultiData->setPVStructure(pvaClientGet[i]->getData()->getPVStructure(),i);
114 pvaClientNTMultiData->endDeltaTime(valueOnly);
119 return pvaClientNTMultiData;
void resize(size_t i)
Grow or shrink array.
TODO only here because of the Lockable.
std::tr1::shared_ptr< PvaClientNTMultiGet > PvaClientNTMultiGetPtr
const std::string & getMessage() const
Provides channelGet to multiple channels where the value field of each channel is presented as a unio...
std::tr1::shared_ptr< PvaClientNTMultiData > PvaClientNTMultiDataPtr
std::tr1::shared_ptr< const Union > UnionConstPtr
size_t size() const
Number of elements visible through this vector.
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PvaClientMultiChannel > PvaClientMultiChannelPtr