本文整理汇总了C++中dbScanUnlock函数的典型用法代码示例。如果您正苦于以下问题:C++ dbScanUnlock函数的具体用法?C++ dbScanUnlock怎么用?C++ dbScanUnlock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dbScanUnlock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: dbNotifyCancel
void dbNotifyCancel(processNotify *ppn)
{
dbCommon *precord = dbChannelRecord(ppn->chan);
notifyState state;
notifyPvt *pnotifyPvt;
dbScanLock(precord);
epicsMutexMustLock(pnotifyGlobal->lock);
ppn->status = notifyCanceled;
pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
if (!pnotifyPvt || pnotifyPvt->state == notifyNotActive) {
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
return;
}
state = pnotifyPvt->state;
switch (state) {
case notifyUserCallbackRequested:
case notifyRestartCallbackRequested:
case notifyUserCallbackActive:
/* Callback is scheduled or active, wait for it to complete */
pnotifyPvt->cancelWait = 1;
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
epicsEventWait(pnotifyPvt->cancelEvent);
epicsMutexMustLock(pnotifyGlobal->lock);
notifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
case notifyNotActive:
break;
case notifyWaitForRestart:
assert(precord->ppn);
assert(precord->ppn!=ppn);
ellSafeDelete(&precord->ppnr->restartList,&ppn->restartNode);
break;
case notifyRestartInProgress:
case notifyProcessInProgress:
{ /*Take all records out of wait list */
processNotifyRecord *ppnrWait;
while ((ppnrWait = (processNotifyRecord *)
ellFirst(&pnotifyPvt->waitList))) {
ellSafeDelete(&pnotifyPvt->waitList, &ppnrWait->waitNode);
restartCheck(ppnrWait);
}
}
if (precord->ppn == ppn)
restartCheck(precord->ppnr);
break;
default:
printf("dbNotify: illegal state for notifyCallback\n");
}
pnotifyPvt->state = notifyNotActive;
notifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
}
开发者ID:epicsdeb,项目名称:epics-base,代码行数:59,代码来源:dbNotify.c
示例2: asynCallback
static void asynCallback(asynUser *pasynUser)
{
mcaAsynPvt *pPvt = (mcaAsynPvt *)pasynUser->userPvt;
mcaRecord *pmca = pPvt->pmca;
mcaAsynMessage *pmsg = pasynUser->userData;
rset *prset = (rset *)pmca->rset;
int status;
asynPrint(pasynUser, ASYN_TRACE_FLOW,
"devMcaAsyn::asynCallback: %s command=%d, ivalue=%d, dvalue=%f\n",
pmca->name, pmsg->command, pmsg->ivalue, pmsg->dvalue);
pasynUser->reason = pPvt->driverReasons[pmsg->command];
if (pmsg->command == mcaData) {
/* Read data */
pPvt->pasynInt32Array->read(pPvt->asynInt32ArrayPvt, pasynUser,
pPvt->data, pmca->nuse, &pPvt->nread);
dbScanLock((dbCommon *)pmca);
(*prset->process)(pmca);
dbScanUnlock((dbCommon *)pmca);
} else if (pmsg->command == mcaReadStatus) {
/* Read the current status of the device */
pPvt->pasynInt32->write(pPvt->asynInt32Pvt, pasynUser, 0);
pasynUser->reason = pPvt->driverReasons[mcaAcquiring];
pPvt->pasynInt32->read(pPvt->asynInt32Pvt, pasynUser, &pPvt->acquiring);
pasynUser->reason = pPvt->driverReasons[mcaElapsedLiveTime];
pPvt->pasynFloat64->read(pPvt->asynFloat64Pvt, pasynUser,
&pPvt->elapsedLive);
pasynUser->reason = pPvt->driverReasons[mcaElapsedRealTime];
pPvt->pasynFloat64->read(pPvt->asynFloat64Pvt, pasynUser,
&pPvt->elapsedReal);
pasynUser->reason = pPvt->driverReasons[mcaElapsedCounts];
pPvt->pasynFloat64->read(pPvt->asynFloat64Pvt, pasynUser,
&pPvt->totalCounts);
pasynUser->reason = pPvt->driverReasons[mcaDwellTime];
pPvt->pasynFloat64->read(pPvt->asynFloat64Pvt, pasynUser,
&pPvt->dwellTime);
dbScanLock((dbCommon *)pmca);
(*prset->process)(pmca);
dbScanUnlock((dbCommon *)pmca);
} else {
if (pmsg->interface == int32Type) {
pPvt->pasynInt32->write(pPvt->asynInt32Pvt, pasynUser,
pmsg->ivalue);
} else {
pPvt->pasynFloat64->write(pPvt->asynFloat64Pvt, pasynUser,
pmsg->dvalue);
}
}
pasynManager->memFree(pmsg, sizeof(*pmsg));
status = pasynManager->freeAsynUser(pasynUser);
if (status != asynSuccess) {
asynPrint(pasynUser, ASYN_TRACE_ERROR,
"devMcaAsyn::asynCallback: %s error in freeAsynUser, %s\n",
pmca->name, pasynUser->errorMessage);
}
}
开发者ID:ISISComputingGroup,项目名称:EPICS-mca,代码行数:59,代码来源:devMcaAsyn.c
示例3: dbNotifyCancel
void epicsShareAPI dbNotifyCancel(putNotify *ppn)
{
dbCommon *precord = ppn->paddr->precord;
putNotifyState state;
putNotifyPvt *pputNotifyPvt;
assert(precord);
dbScanLock(precord);
epicsMutexMustLock(pnotifyGlobal->lock);
pputNotifyPvt = (putNotifyPvt *)ppn->pputNotifyPvt;
if(!pputNotifyPvt || pputNotifyPvt->state==putNotifyNotActive) {
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
return;
}
state = pputNotifyPvt->state;
/*If callback is scheduled or active wait for it to complete*/
if(state==putNotifyUserCallbackRequested
|| state==putNotifyRestartCallbackRequested
|| state==putNotifyUserCallbackActive) {
pputNotifyPvt->cancelWait = 1;
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
epicsEventWait(pputNotifyPvt->cancelEvent);
epicsMutexMustLock(pnotifyGlobal->lock);
putNotifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
switch(state) {
case putNotifyNotActive: break;
case putNotifyWaitForRestart:
assert(precord->ppn);
assert(precord->ppn!=ppn);
ellSafeDelete(&precord->ppnr->restartList,&ppn->restartNode);
break;
case putNotifyRestartInProgress:
case putNotifyPutInProgress:
{ /*Take all records out of wait list */
putNotifyRecord *ppnrWait;
while((ppnrWait = (putNotifyRecord *)ellFirst(&pputNotifyPvt->waitList))){
ellSafeDelete(&pputNotifyPvt->waitList,&ppnrWait->waitNode);
restartCheck(ppnrWait);
}
}
if(precord->ppn==ppn) restartCheck(precord->ppnr);
break;
default:
printf("dbNotify: illegal state for notifyCallback\n");
}
pputNotifyPvt->state = putNotifyNotActive;
putNotifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
}
开发者ID:ukaea,项目名称:epics,代码行数:56,代码来源:dbNotify.c
示例4: check_bo_callback
/* Callback for bo, see ao_callback comments */
static void check_bo_callback(void *arg)
{
boRecord *rec = (boRecord *) arg;
struct rset *rset= (struct rset *)(rec->rset);
DevicePrivate *pvt = (DevicePrivate *)rec->dpvt;
unsigned long rval;
eip_bool process = false;
/* We are about the check and even set val, & rval -> lock */
dbScanLock((dbCommon *)rec);
if (rec->pact)
{
(*rset->process) ((dbCommon *)rec);
dbScanUnlock((dbCommon *)rec);
return;
}
/* Check if record's (R)VAL is current */
if (!check_data((dbCommon *) rec))
{
(*rset->process) ((dbCommon *)rec);
dbScanUnlock((dbCommon *)rec);
return;
}
if (get_bits((dbCommon *)rec, 1, &rval) &&
(rec->udf || rec->sevr == INVALID_ALARM || rec->rval != rval))
{
if (rec->tpro)
printf("'%s': got %lu from driver\n", rec->name, rval);
if (!rec->udf && pvt->special & SPCO_FORCE)
{
if (rec->tpro)
printf("'%s': will re-write record's value %u\n",
rec->name, (unsigned int)rec->val);
}
else
{ /* back-convert rval into val */
rec->rval = rval;
rec->val = (rec->rval==0) ? 0 : 1;
rec->udf = false;
if (rec->tpro)
printf("'%s': updated record to tag, val = %u\n",
rec->name, (unsigned int)rec->val);
}
process = true;
}
dbScanUnlock((dbCommon *)rec);
/* Does record need processing and is not periodic? */
if (process && rec->scan < SCAN_1ST_PERIODIC)
scanOnce(rec);
}
开发者ID:Sangil-Lee,项目名称:RefCode,代码行数:51,代码来源:devEtherIP.c
示例5: lock
void DbPvPut::get()
{
if(DbPvDebug::getLevel()>0) printf("dbPvPut::get()\n");
{
Lock lock(dataMutex);
dbScanLock(dbChannelRecord(dbPv->getDbChannel()));
bitSet->clear();
Status status = dbUtil->get(
channelPutRequester,
propertyMask,
dbPv->getDbChannel(),
pvStructure,
bitSet,
0);
dbScanUnlock(dbChannelRecord(dbPv->getDbChannel()));
if(firstTime) {
firstTime = false;
bitSet->set(pvStructure->getFieldOffset());
}
}
channelPutRequester->getDone(
status,
getPtrSelf(),
pvStructure,
bitSet);
}
开发者ID:pheest,项目名称:pvaSrv,代码行数:26,代码来源:dbPvPut.cpp
示例6: dbProcessNotify
void DbPvPut::put(PVStructurePtr const &pvStructure, BitSetPtr const & bitSet)
{
if (DbPvDebug::getLevel() > 0) printf("dbPvPut::put()\n");
this->pvStructure = pvStructure;
this->bitSet = bitSet;
if (block && process) {
dbProcessNotify(pNotify.get());
return;
}
Lock lock(dataMutex);
PVFieldPtr pvField = pvStructure.get()->getPVFields()[0];
if (propertyMask & dbUtil->dbPutBit) {
status = dbUtil->putField(
channelPutRequester,
propertyMask,
dbPv->getDbChannel(),
pvField);
} else {
dbScanLock(dbChannelRecord(dbPv->getDbChannel()));
status = dbUtil->put(
channelPutRequester, propertyMask, dbPv->getDbChannel(), pvField);
if (process) dbProcess(dbChannelRecord(dbPv->getDbChannel()));
dbScanUnlock(dbChannelRecord(dbPv->getDbChannel()));
}
lock.unlock();
channelPutRequester->putDone(status, getPtrSelf());
}
开发者ID:pheest,项目名称:pvaSrv,代码行数:30,代码来源:dbPvPut.cpp
示例7: lock
void DbPvPut::put(PVStructurePtr const &pvStructure, BitSetPtr const & bitSet)
{
if(DbPvDebug::getLevel()>0) printf("dbPvPut::put()\n");
Lock lock(dataMutex);
this->pvStructure = pvStructure;
this->bitSet = bitSet;
PVFieldPtr pvField = pvStructure.get()->getPVFields()[0];
if(propertyMask&dbUtil->dbPutBit) {
Status status = dbUtil->putField(
channelPutRequester,propertyMask,dbAddr,pvField);
lock.unlock();
channelPutRequester->putDone(status,getPtrSelf());
return;
}
dbScanLock(dbAddr.precord);
Status status = dbUtil->put(
channelPutRequester, propertyMask, dbAddr, pvField);
if (process && !block) dbProcess(dbAddr.precord);
dbScanUnlock(dbAddr.precord);
lock.unlock();
if (block && process) {
epicsUInt8 value = 1;
pNotify.get()->pbuffer = &value;
dbPutNotify(pNotify.get());
} else {
channelPutRequester->putDone(status, getPtrSelf());
}
}
开发者ID:dhickin,项目名称:pvaSrv,代码行数:28,代码来源:dbPvPut.cpp
示例8: myCallback_devBoSyncSoft
static void myCallback_devBoSyncSoft(CALLBACK *p_callback)
{
struct dbCommon *precord;
CONTEXT *p_myContext;
struct rset *prset;
callbackGetUser(precord,p_callback);
#ifdef DEBUG1
printf( __FILE__ "[%d] -> %s (%s)\n", __LINE__, __func__, precord->name );
#endif
p_myContext=(CONTEXT *)precord->dpvt;
prset = (struct rset *)(precord->rset);
dbScanLock(precord);
(*prset->process)(precord);
dbScanUnlock(precord);
#ifdef DEBUG1
printf( __FILE__ "[%d] <- %s\n", __LINE__, __func__ );
#endif
return;
}
开发者ID:emayssat,项目名称:epics-iocs,代码行数:25,代码来源:devBoSyncSoft2.c
示例9: callUser
static void callUser(dbCommon *precord,putNotify *ppn)
{
putNotifyPvt *pputNotifyPvt = (putNotifyPvt *)ppn->pputNotifyPvt;
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
(*ppn->userCallback)(ppn);
epicsMutexMustLock(pnotifyGlobal->lock);
if(pputNotifyPvt->cancelWait && pputNotifyPvt->userCallbackWait) {
errlogPrintf("%s putNotify: both cancelWait and userCallbackWait true."
"This is illegal\n",precord->name);
pputNotifyPvt->cancelWait = pputNotifyPvt->userCallbackWait = 0;
}
if(!pputNotifyPvt->cancelWait && !pputNotifyPvt->userCallbackWait) {
putNotifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
if(pputNotifyPvt->cancelWait) {
pputNotifyPvt->cancelWait = 0;
epicsEventSignal(pputNotifyPvt->cancelEvent);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
assert(pputNotifyPvt->userCallbackWait);
pputNotifyPvt->userCallbackWait = 0;
epicsEventSignal(pputNotifyPvt->userCallbackEvent);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
开发者ID:ukaea,项目名称:epics,代码行数:30,代码来源:dbNotify.c
示例10: calcThread
static EPICSTHREADFUNC calcThread(void *param)
{
subRecord *precord;
myData *pmyData;
struct rset *prset;
while(epicsMessageQueueReceive(queueId, (void*) &pmyData, sizeof(myData*))) {
precord = pmyData->precord;
prset = (struct rset*) precord->rset;
if(dbSubFinalDebug) {
epicsMessageQueueShow(queueId, 1);
epicsPrintf("Thread %s: Record %s requested thread processing\n",
epicsThreadGetNameSelf(),
precord->name);
}
pmyData->private_counter ++;
dbScanLock((struct dbCommon*) precord);
(*prset->process)(precord);
dbScanUnlock((struct dbCommon*) precord);
}
return 0;
}
开发者ID:RaonControl,项目名称:siteApps,代码行数:30,代码来源:dbSubTrFinal.c
示例11: dbtr
long epicsShareAPI dbtr(const char *pname)
{
DBADDR addr;
long status;
struct dbCommon *precord;
if (!pname || !*pname) {
printf("Usage: dbtr \"pv name\"\n");
return 1;
}
if (nameToAddr(pname, &addr))
return -1;
precord = (struct dbCommon*)addr.precord;
if (precord->pact) {
printf("record active\n");
return 1;
}
dbScanLock(precord);
status = dbProcess(precord);
dbScanUnlock(precord);
if (status)
recGblRecordError(status, precord, "dbtr(dbProcess)");
dbpr(pname, 3);
return 0;
}
开发者ID:ISISComputingGroup,项目名称:EPICS-base,代码行数:30,代码来源:dbTest.c
示例12: interruptCallback
static void interruptCallback(void *drvPvt, asynUser *pasynUser,
epicsInt32 value)
{
devBusyPvt *pPvt = (devBusyPvt *)drvPvt;
busyRecord *pr = (busyRecord *)pPvt->pr;
unsigned short monitor_mask;
dbScanLock((dbCommon *)pr);
asynPrint(pPvt->pasynUser, ASYN_TRACEIO_DEVICE,
"%s devAsynBusy::interruptCallback new value=%d\n",
pr->name, value);
/* If the current value of the record is 1 and the new value is 0 then post monitors
* and call recGblFwdLink
* Ignore the callback if pr->pact=1 because a write operation is in progress. */
if ((pr->pact == 0) && (pr->val == 1) && (value == 0)) {
/* If the current value of the record is 1 and the new value is 0 then post monitors
* and call recGblFwdLink */
asynPrint(pPvt->pasynUser, ASYN_TRACEIO_DEVICE,
"%s devAsynBusy::interruptCallback 1 to 0 transition, posting monitors and calling recGblFwdLink\n",
pr->name);
pr->val = value;
monitor_mask = recGblResetAlarms(pr);
/* post events for value change and archive change */
monitor_mask |= (DBE_VALUE | DBE_LOG);
/* update last value monitored */
pr->mlst = pr->val;
/* send out monitors connected to the value field */
if (monitor_mask){
db_post_events(pr,&pr->val,monitor_mask);
}
recGblFwdLink(pr);
}
dbScanUnlock((dbCommon *)pr);
}
开发者ID:epics-modules,项目名称:busy,代码行数:34,代码来源:devBusyAsyn.c
示例13: notifyCallback
static void notifyCallback(CALLBACK *pcallback)
{
processNotify *ppn = NULL;
dbCommon *precord;
notifyPvt *pnotifyPvt;
callbackGetUser(ppn,pcallback);
pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
precord = dbChannelRecord(ppn->chan);
dbScanLock(precord);
epicsMutexMustLock(pnotifyGlobal->lock);
assert(precord->ppnr);
assert(pnotifyPvt->state == notifyRestartCallbackRequested ||
pnotifyPvt->state == notifyUserCallbackRequested);
assert(ellCount(&pnotifyPvt->waitList) == 0);
if (pnotifyPvt->cancelWait) {
if (pnotifyPvt->state == notifyRestartCallbackRequested) {
restartCheck(precord->ppnr);
}
epicsEventSignal(pnotifyPvt->cancelEvent);
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
return;
}
if(pnotifyPvt->state == notifyRestartCallbackRequested) {
processNotifyCommon(ppn, precord);
return;
}
/* All done. Clean up and call userCallback */
pnotifyPvt->state = notifyUserCallbackActive;
assert(precord->ppn!=ppn);
callDone(precord, ppn);
}
开发者ID:epicsdeb,项目名称:epics-base,代码行数:33,代码来源:dbNotify.c
示例14: dbProcessNotify
void dbProcessNotify(processNotify *ppn)
{
struct dbChannel *chan = ppn->chan;
dbCommon *precord = dbChannelRecord(chan);
short dbfType = dbChannelFieldType(chan);
notifyPvt *pnotifyPvt;
/* Must handle DBF_XXXLINKs as special case.
* Only dbPutField will change link fields.
* Also the record is not processed as a result
*/
ppn->status = notifyOK;
ppn->wasProcessed = 0;
if (dbfType>=DBF_INLINK && dbfType<=DBF_FWDLINK) {
if (ppn->requestType == putProcessRequest ||
ppn->requestType == putProcessGetRequest) {
/* Check if puts disabled */
if (precord->disp && (dbChannelField(ppn->chan) != (void *) &precord->disp)) {
ppn->putCallback(ppn, putDisabledType);
} else {
ppn->putCallback(ppn, putFieldType);
}
}
if (ppn->requestType == processGetRequest ||
ppn->requestType == putProcessGetRequest) {
ppn->getCallback(ppn, getFieldType);
}
ppn->doneCallback(ppn);
return;
}
dbScanLock(precord);
epicsMutexMustLock(pnotifyGlobal->lock);
pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
if (pnotifyPvt && (pnotifyPvt->magic != MAGIC)) {
printf("dbPutNotify:pnotifyPvt was not initialized\n");
pnotifyPvt = 0;
}
if (pnotifyPvt) {
assert(pnotifyPvt->state == notifyUserCallbackActive);
pnotifyPvt->userCallbackWait = 1;
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
epicsEventWait(pnotifyPvt->userCallbackEvent);
dbScanLock(precord);
epicsMutexMustLock(pnotifyGlobal->lock);
notifyCleanup(ppn);
}
pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
assert(!pnotifyPvt);
notifyInit(ppn);
pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
if (!precord->ppnr) {
/* make sure record has a processNotifyRecord*/
precord->ppnr = dbCalloc(1, sizeof(processNotifyRecord));
precord->ppnr->precord = precord;
ellInit(&precord->ppnr->restartList);
}
processNotifyCommon(ppn, precord);
}
开发者ID:epicsdeb,项目名称:epics-base,代码行数:60,代码来源:dbNotify.c
示例15: callDone
static void callDone(dbCommon *precord, processNotify *ppn)
{
notifyPvt *pnotifyPvt = (notifyPvt *) ppn->pnotifyPvt;
epicsMutexUnlock(pnotifyGlobal->lock);
if (ppn->requestType == processGetRequest ||
ppn->requestType == putProcessGetRequest) {
ppn->getCallback(ppn, getFieldType);
}
dbScanUnlock(precord);
ppn->doneCallback(ppn);
epicsMutexMustLock(pnotifyGlobal->lock);
if (pnotifyPvt->cancelWait && pnotifyPvt->userCallbackWait) {
errlogPrintf("%s processNotify: both cancelWait and userCallbackWait true."
"This is illegal\n", precord->name);
pnotifyPvt->cancelWait = pnotifyPvt->userCallbackWait = 0;
}
if (!pnotifyPvt->cancelWait && !pnotifyPvt->userCallbackWait) {
notifyCleanup(ppn);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
if (pnotifyPvt->cancelWait) {
pnotifyPvt->cancelWait = 0;
epicsEventSignal(pnotifyPvt->cancelEvent);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
assert(pnotifyPvt->userCallbackWait);
pnotifyPvt->userCallbackWait = 0;
epicsEventSignal(pnotifyPvt->userCallbackEvent);
epicsMutexUnlock(pnotifyGlobal->lock);
return;
}
开发者ID:epicsdeb,项目名称:epics-base,代码行数:34,代码来源:dbNotify.c
示例16: myBoard_wakeupQueue
void myBoard_wakeupQueue( int board ) {
MY_BOARD_SOFTWARE *pBoardSoft = myBoard_getSoftwareBoard( board );
if (pBoardSoft == NULL) return;
QUEUE_T *pQueue = &pBoardSoft->asyncQueue;
int numCurrent = asyncQueueGetUsed( pQueue );
int qid;
fprintf( stderr, "queue length=%d\n", numCurrent );
for (qid = 0; qid < numCurrent; ++qid) {
dbCommon *p = asyncQueuePop( pQueue );
fprintf( stderr, "checking [%d] %s\n", qid, p->name );
if (enoughDataToProcess( p )) {
struct rset * prset = p->rset;
fprintf( stderr, "processing q[%d] id=%d\n", board, qid );
dbScanLock( p );
(*prset->process)( p );
dbScanUnlock( p );
} else {
/* put back */
asyncQueuePush( pQueue, p );
}
}
fprintf( stderr, "done processing queue for b=%d\n", board );
}
开发者ID:emayssat,项目名称:epics-iocs,代码行数:26,代码来源:myBoard.c
示例17: acalcPerformTask
static void acalcPerformTask(void *parm) {
calcMessage msg;
acalcoutRecord *pcalc;
struct rset *prset;
if (aCalcoutRecordDebug >= 10)
printf("acalcPerformTask:entry\n");
while (1) {
/* waiting for messages */
if (epicsMessageQueueReceive(acalcMsgQueue, &msg, MSG_SIZE) != MSG_SIZE) {
printf("acalcPerformTask: epicsMessageQueueReceive returned wrong size\n");
break;
}
pcalc = msg.pcalc;
prset = (struct rset *)(pcalc->rset);
dbScanLock((struct dbCommon *)pcalc);
if (aCalcoutRecordDebug >= 10)
printf("acalcPerformTask:message from '%s'\n", pcalc->name);
call_aCalcPerform(pcalc);
if (aCalcoutRecordDebug >= 10)
printf("acalcPerformTask:processing '%s'\n", pcalc->name);
(*prset->process)(pcalc);
dbScanUnlock((struct dbCommon *)pcalc);
}
}
开发者ID:ukaea,项目名称:epics,代码行数:30,代码来源:aCalcoutRecord.c
示例18: outputCallbackCallback
static void outputCallbackCallback(CALLBACK *pcb)
{
devPvt *pPvt;
static const char *functionName="outputCallbackCallback";
callbackGetUser(pPvt, pcb);
{
dbCommon *pr = pPvt->pr;
dbScanLock(pr);
epicsMutexLock(pPvt->devPvtLock);
pPvt->newOutputCallbackValue = 1;
dbProcess(pr);
if (pPvt->newOutputCallbackValue != 0) {
/* We called dbProcess but the record did not process, perhaps because PACT was 1
* Need to remove ring buffer element */
asynPrint(pPvt->pasynUser, ASYN_TRACE_ERROR,
"%s %s::%s warning dbProcess did not process record, PACT=%d\n",
pr->name, driverName, functionName,pr->pact);
getCallbackValue(pPvt);
pPvt->newOutputCallbackValue = 0;
}
epicsMutexUnlock(pPvt->devPvtLock);
dbScanUnlock(pr);
}
}
开发者ID:epics-modules,项目名称:asyn,代码行数:25,代码来源:devAsynFloat64.c
示例19: putNotifyCommon
static void putNotifyCommon(putNotify *ppn,dbCommon *precord)
{
long status=0;
dbFldDes *pfldDes = ppn->paddr->pfldDes;
putNotifyPvt *pputNotifyPvt = (putNotifyPvt *)ppn->pputNotifyPvt;
if(precord->ppn && pputNotifyPvt->state!=putNotifyRestartCallbackRequested)
{ /*another putNotify owns the record */
pputNotifyPvt->state = putNotifyWaitForRestart;
ellSafeAdd(&precord->ppnr->restartList,&ppn->restartNode);
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
return;
} else if(precord->ppn){
assert(precord->ppn==ppn);
assert(pputNotifyPvt->state==putNotifyRestartCallbackRequested);
}
if(precord->pact) {
precord->ppn = ppn;
ellSafeAdd(&pputNotifyPvt->waitList,&precord->ppnr->waitNode);
pputNotifyPvt->state = putNotifyRestartInProgress;
epicsMutexUnlock(pnotifyGlobal->lock);
dbScanUnlock(precord);
return;
}
status=dbPut(ppn->paddr,ppn->dbrType,ppn->pbuffer,ppn->nRequest);
ppn->status = (status==0) ? putNotifyOK : putNotifyError;
/* Check to see if dbProcess should not be called */
if(!status /*dont process if dbPut returned error */
&&((ppn->paddr->pfield==(void *)&precord->proc) /*If PROC call dbProcess*/
|| (pfldDes->process_passive && precord->scan==0))) {
precord->ppn = ppn;
ellSafeAdd(&pputNotifyPvt->waitList,&precord->ppnr->waitNode);
pputNotifyPvt->state = putNotifyPutInProgress;
epicsMutexUnlock(pnotifyGlobal->lock);
dbProcess(precord);
dbScanUnlock(precord);
return;
}
if(pputNotifyPvt->state==putNotifyRestartCallbackRequested) {
restartCheck(precord->ppnr);
}
pputNotifyPvt->state = putNotifyUserCallbackActive;
assert(precord->ppn!=ppn);
callUser(precord,ppn);
}
开发者ID:ukaea,项目名称:epics,代码行数:46,代码来源:dbNotify.c
示例20: dbCaCallbackProcess
void dbCaCallbackProcess(void *usrPvt)
{
struct link *plink = (struct link *)usrPvt;
dbCommon *pdbCommon = plink->value.pv_link.precord;
dbScanLock(pdbCommon);
pdbCommon->rset->process(pdbCommon);
dbScanUnlock(pdbCommon);
}
开发者ID:T-A-R-L-A,项目名称:EPICS-Base,代码行数:9,代码来源:dbCa.c
注:本文中的dbScanUnlock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论