Example #1
0
void ChannelGetLocal::get()
{
    ChannelGetRequester::shared_pointer requester = channelGetRequester.lock();
    if(!requester) return;
    if(isDestroyed) {
         requester->getDone(
             channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
         return;
    } 
    try {
        bitSet->clear();
        {
            epicsGuard <PVRecord> guard(*pvRecord);
            if(callProcess) {
                pvRecord->beginGroupPut();
                pvRecord->process();
                pvRecord->endGroupPut();
            }
            pvCopy->updateCopySetBitSet(pvStructure, bitSet);
        }
        if(firstTime) {
            bitSet->clear();
            bitSet->set(0);
            firstTime = false;
        } 
        requester->getDone(
            Status::Ok,
            getPtrSelf(),
            pvStructure,
            bitSet);
        if(pvRecord->getTraceLevel()>1)
        {
            cout << "ChannelGetLocal::get" << endl;
        }
    } catch(std::exception& ex) {
        Status status = Status(Status::STATUSTYPE_FATAL, ex.what());
        requester->getDone(status,getPtrSelf(),pvStructure,bitSet);
    }

}