亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? msgqlib.c

?? 操作系統(tǒng)開發(fā),vxwork操作系統(tǒng)源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* msgQLib.c - message queue library *//* Copyright 1990-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02n,10dec01,bwa  Added comment about MSG_Q_EVENTSEND_ERR_NOTIFY msgQCreate                 option (SPR 72058).02m,26oct01,bwa  Added msgQEvLib and eventLib to the list of 'SEE ALSO'                 modules.02l,12oct01,cjj  Added documentation regarding S_eventLib_EVENTSEND_FAILED                 error02k,09oct01,gls  merged in 02j, 02i, 02h, 02g below from AE.02j,22feb01,ahm  ensured errno does'nt change if msgQDelete() is successful                 (SPR#34643)02i,19sep00,bwa  passed extra argument (msgQid) to calls to qJobGet()                 added errnoSet after calls to qJobGet()(SPR #34057) 02h,06sep00,aeg  doc: mentioned INCLUDE_MSG_Q component name.02g,11aug00,aeg  fixed updating of timeout stats in msgQSend/Receive (SPR 33683)02f,07sep01,bwa  Added VxWorks events support. Fixed SPR #31241 (corrected		 msgQReceive comment for NO_WAIT).02e,18dec00,pes  Correct compiler warnings02d,19may98,drm  merged code from 3rd party to add distributed message queue                  support.                 - merged code was originally based on version 02a 02c,11may98,cjtc fix problem with problem fix!! Multiple calls to object                 instrumentation in msgQDestroy02b,11may98,nps  fixed msgQDestroy instrumentation anomaly.02c,17apr98,rlp  canceled msgQInit and msgQSend modifications for backward                 compatibility.02b,04nov97,rlp  modified msgQInit and msgQSend for tracking messages sent.02a,24jun96,sbs  made windview instrumentation conditionally compiled01z,22oct95,jdi  doc: added bit values for options (SPR 4276).02d,14apr94,smb  fixed class dereferencing for instrumentation macros02c,15mar94,smb  modified instrumentation macros02b,24jan94,smb  added instrumentation macros02a,18jan94,smb  added instrumentation corrections for msgQDelete01z,10dec93,smb  added instrumentation01y,30jun93,jmm  changed msgQDestroy to look at msgQ as well as freeQ (spr 2070)01x,02feb93,jdi  documentation cleanup for 5.1.01w,13nov92,jcf  package init called with object creation.01v,19oct92,pme  added reference to shared message queue documentation.01u,23aug92,jcf  balanced taskSafe with taskUnsafe.01t,11aug92,jcf  fixed msgQDestroy safety problem.01s,30jul92,rrr  added restart and msgQ fix01r,29jul92,pme  added NULL function pointer check for smObj routines.01q,29jul92,jcf  package init called with object initialization.01p,22jul92,pme  made msgQDestroy return S_smObjLib_NO_OBJECT_DESTROY when		 trying to destroy a shared message queue.01o,19jul92,pme  added shared message queue support.01n,18jul92,smb  Changed errno.h to errnoLib.h.01m,04jul92,jcf	 show routine removed.01l,26may92,rrr  the tree shuffle01k,13dec91,gae  ANSI fixes.  01j,19nov91,rrr  shut up some ansi warnings.01i,04oct91,rrr  passed through the ansification filter                  -changed functions to ansi style		  -changed includes to have absolute path from h/		  -changed VOID to void		  -changed copyright notice01h,10aug91,del  changed interface to qInit to pass all "optional" args.01g,05apr91,jdi	 documentation -- removed header parens and x-ref numbers;		 doc review by dnw.01f,22jan91,jaa	 documentation.01e,08oct90,dnw  lint01d,01oct90,dnw  fixed bug of msgQSend() not returning ERROR on timeout.		 removed msgQSendArgs()/ReceiveArgs().		 reordered parameters of msgQ{Send,Receive}().		 simplified msgQInfoGet() interface.		 added msgQNumMsgs().		 made msgQDestroy() LOCAL.		 made msgQ{LibInit,Init,Terminate}() be NOMANUAL.		 finished documentation.01c,19jul90,dnw  added VARARGS to msgQ{Send,Receive}Args()01b,19jul90,dnw  changed call to objAlloc() to objAllocExtra()		 made msgQShow() prettier		 lint01a,10may90,dnw  written*//*DESCRIPTIONThis library contains routines  for creating and using message queues, the primary intertask communication mechanism within a single CPU.  Messagequeues allow a variable number of messages (varying in length) to bequeued in first-in-first-out (FIFO) order.  Any task or interrupt serviceroutine can send messages to a message queue.  Any task can receivemessages from a message queue.  Multiple tasks can send to and receivefrom the same message queue.  Full-duplex communication between two tasksgenerally requires two message queues, one for each direction.To provide message queue support for a system, VxWorks must be configuredwith the INCLUDE_MSG_Q component.CREATING AND USING MESSAGE QUEUESA message queue is created with msgQCreate().  Its parameters specify themaximum number of messages that can be queued to that message queue and the maximum length in bytes of each message.  Enough buffer space will be pre-allocated to accommodate the specified number of messages of specified length.A task or interrupt service routine sends a message to a message queuewith msgQSend().  If no tasks are waiting for messages on the message queue,the message is simply added to the buffer of messages for that queue.If any tasks are already waiting to receive a message from the messagequeue, the message is immediately delivered to the first waiting task.A task receives a message from a message queue with msgQReceive().If any messages are already available in the message queue's buffer,the first message is immediately dequeued and returned to the caller.If no messages are available, the calling task will block and be added toa queue of tasks waiting for messages.  This queue of waiting tasks canbe ordered either by task priority or FIFO, as specified in an optionparameter when the queue is created.TIMEOUTSBoth msgQSend() and msgQReceive() take timeout parameters.  When sending amessage, if no buffer space is available to queue the message, the timeoutspecifies how many ticks to wait for space to become available.  Whenreceiving a message, the timeout specifies how many ticks to wait if nomessage is immediately available.  The <timeout> parameter canhave the special values NO_WAIT (0) or WAIT_FOREVER (-1).  NO_WAIT means the routine should return immediately; WAIT_FOREVER means the routineshould never time out.URGENT MESSAGESThe msgQSend() routine allows the priority of a message to be specifiedas either normal or urgent, MSG_PRI_NORMAL (0) and MSG_PRI_URGENT (1),respectively.  Normal priority messages are added to the tail of the listof queued messages, while urgent priority messages are added to the headof the list.VXWORKS EVENTSIf a task has registered with a message queue via msgQEvStart(), events willbe sent to that task when a message arrives on that message queue, on thecondition that no other task is pending on the queue.INTERNAL:	WINDVIEW INSTRUMENTATIONLevel 1:	msgQCreate() causes EVENT_MSGQCREATE	msgQDestroy() causes EVENT_MSGQDELETE	msgQSend() causes EVENT_MSGQSEND	msgQReceive() causes EVENT_MSGQRECEIVELevel 2:	N/ALevel 3:	N/AINCLUDE FILES: msgQLib.hSEE ALSO: pipeDrv, msgQSmLib, msgQEvLib, eventLib,.pG "Basic OS"*/#include "vxWorks.h"#include "stdlib.h"#include "string.h"#include "taskLib.h"#include "intLib.h"#include "smObjLib.h"#include "errnoLib.h"#include "private/eventLibP.h"#include "private/classLibP.h"#include "private/objLibP.h"#include "private/msgQLibP.h"#include "private/msgQSmLibP.h"#include "private/distObjTypeP.h"#include "private/sigLibP.h"#include "private/eventP.h"#include "private/windLibP.h"#include "private/kernelLibP.h"/* locals */LOCAL OBJ_CLASS msgQClass;/* globals */CLASS_ID msgQClassId = &msgQClass;/* Instrumentation locals and globals */#ifdef WV_INSTRUMENTATIONLOCAL OBJ_CLASS msgQInstClass;CLASS_ID msgQInstClassId = &msgQInstClass;#endif/* shared memory objects function pointers */FUNCPTR  msgQSmSendRtn;FUNCPTR  msgQSmReceiveRtn;FUNCPTR  msgQSmNumMsgsRtn;/* distributed objects function pointers */FUNCPTR  msgQDistSendRtn;FUNCPTR  msgQDistReceiveRtn;FUNCPTR  msgQDistNumMsgsRtn;/* forward declarations */LOCAL STATUS msgQDestroy (MSG_Q_ID msgQId, BOOL dealloc);/* locals */LOCAL BOOL msgQLibInstalled;	/* protect from muliple inits *//********************************************************************************* msgQLibInit - initialize message queue library** This routine initializes message queue facility.* It is called once in kernelInit().** RETURNS: OK or ERROR** NOMANUAL*/STATUS msgQLibInit (void)    {    /* initialize shared memory objects function pointers */    if (!msgQLibInstalled)	{	if (classInit (msgQClassId, sizeof (MSG_Q), OFFSET (MSG_Q, objCore),		       (FUNCPTR)msgQCreate, (FUNCPTR)msgQInit,		       (FUNCPTR)msgQDestroy) == OK)	    {#ifdef WV_INSTRUMENTATION	    /* Instrumented class for windview */	    msgQClassId->initRtn = msgQInstClassId;            classInstrument (msgQClassId,msgQInstClassId);#endif	    msgQEvLibInit (); /* pull msgQLib in kernel */	    msgQLibInstalled = TRUE;	    }	}    return ((msgQLibInstalled) ? OK : ERROR);    }/********************************************************************************* msgQCreate - create and initialize a message queue** This routine creates a message queue capable of holding up to <maxMsgs>* messages, each up to <maxMsgLength> bytes long.  The routine returns * a message queue ID used to identify the created message queue in all * subsequent calls to routines in this library.  The queue can be created * with the following options:* .iP "MSG_Q_FIFO  (0x00)" 8* queue pended tasks in FIFO order.* .iP "MSG_Q_PRIORITY  (0x01)"* queue pended tasks in priority order.* .iP "MSG_Q_EVENTSEND_ERR_NOTIFY (0x02)"* When a message is sent, if a task is registered for events and the* actual sending of events fails, a value of ERROR is returned and the errno* is set accordingly. This option is off by default.* .LP** RETURNS:* MSG_Q_ID, or NULL if error.** ERRNO: S_memLib_NOT_ENOUGH_MEMORY, S_intLib_NOT_ISR_CALLABLE** SEE ALSO: msgQSmLib*/MSG_Q_ID msgQCreate    (    int         maxMsgs,        /* max messages that can be queued */    int         maxMsgLength,   /* max bytes in a message */    int         options         /* message queue options */    )    {    MSG_Q_ID	msgQId;    void *	pPool;		/* pointer to memory for messages */    UINT	size = (UINT) maxMsgs * MSG_NODE_SIZE (maxMsgLength);    if (INT_RESTRICT () != OK)		/* restrict ISR from calling */	return (NULL);    if ((!msgQLibInstalled) && (msgQLibInit () != OK))	return (NULL);			/* package init problem */    if ((msgQId = (MSG_Q_ID)objAllocExtra (msgQClassId, size, &pPool)) == NULL)	return (NULL);    if (msgQInit (msgQId, maxMsgs, maxMsgLength, options, pPool) != OK)	{	objFree (msgQClassId, (char *) msgQId);	return (NULL);	}#ifdef WV_INSTRUMENTATION    /* windview - level 1 event logging routine */    EVT_OBJ_4 (OBJ, msgQId, msgQClassId, EVENT_MSGQCREATE, 		msgQId, maxMsgs, maxMsgLength, options);#endif    return ((MSG_Q_ID) msgQId);    }/********************************************************************************* msgQInit - initialize a message queue** This routine initializes a message queue data structure.  Like msgQCreate()* the resulting message queue is capable of holding up to <maxMsgs> messages,* each of up to <maxMsgLength> bytes long.* However, instead of dynamically allocating the MSG_Q data structure,* this routine takes a pointer <pMsgQ> to the MSG_Q data structure to be* initialized, and a pointer <pMsgPool> to the buffer to be use to hold* queued messages.  <pMsgPool> must point to a 4 byte aligned buffer* that is (<maxMsgs> * MSG_NODE_SIZE (<maxMsgLength>)).** The queue can be created with the following options:**	MSG_Q_FIFO	queue pended tasks in FIFO order*	MSG_Q_PRIORITY	queue pended tasks in priority order** RETURNS: OK or ERROR.** ERRNO: S_msgQLib_INVALID_QUEUE_TYPE** SEE ALSO: msgQCreate()** NOMANUAL*/STATUS msgQInit    (    FAST MSG_Q *pMsgQ,          /* pointer to msg queue to initialize */    int         maxMsgs,        /* max messages that can be queued */    int         maxMsgLength,   /* max bytes in a message */    int         options,        /* message queue options */    void *      pMsgPool        /* pointer to memory for messages */    )    {    FAST int		nodeSize = MSG_NODE_SIZE (maxMsgLength);    FAST int		ix;    FAST Q_CLASS_ID	msgQType;    if ((!msgQLibInstalled) && (msgQLibInit () != OK))	return (ERROR);				/* package init problem */    bzero ((char *) pMsgQ, sizeof (*pMsgQ));	/* clear out msg q structure */    /* initialize internal job queues */    switch (options & MSG_Q_TYPE_MASK)        {        case MSG_Q_FIFO:	msgQType = Q_FIFO;	break;        case MSG_Q_PRIORITY:	msgQType = Q_PRI_LIST;	break;        default:            errnoSet (S_msgQLib_INVALID_QUEUE_TYPE);	    return (ERROR);        }    if ((qInit ((Q_HEAD *) &pMsgQ->msgQ, qJobClassId, msgQType,	 0, 0, 0, 0, 0, 0, 0, 0, 0) != OK) ||	(qInit ((Q_HEAD *) &pMsgQ->freeQ, qJobClassId, msgQType,	 0, 0, 0, 0, 0, 0, 0, 0, 0) != OK))	return (ERROR);    /* put msg nodes on free list */    for (ix = 0; ix < maxMsgs; ix++)	{	qJobPut (pMsgQ, &pMsgQ->freeQ, (Q_JOB_NODE *) pMsgPool,		 Q_JOB_PRI_DONT_CARE);	pMsgPool = (void *) (((char *) pMsgPool) + nodeSize);	}    /* initialize rest of msg q */    pMsgQ->options	= options;    pMsgQ->maxMsgs	= maxMsgs;    pMsgQ->maxMsgLength	= maxMsgLength;    eventInit (&pMsgQ->events);#ifdef WV_INSTRUMENTATION    if (wvObjIsEnabled)    {    /* windview - connect level 1 event logging routine */    objCoreInit (&pMsgQ->objCore, msgQInstClassId);    }    else#endif    objCoreInit (&pMsgQ->objCore, msgQClassId);    return (OK);    }/******************************************************************************** msgQTerminate - terminate message queue** This routine terminates a static message queue that was initialized with* msgQInit.** RETURNS: OK or ERROR.** NOMANUAL*/STATUS msgQTerminate    (    MSG_Q_ID msgQId     /* message queue id to terminate */    )    {    return (msgQDestroy (msgQId, FALSE));    }/********************************************************************************* msgQDelete - delete a message queue** This routine deletes a message queue.  All tasks pending on either* msgQSend(), msgQReceive() or pending for the reception of events* meant to be sent from the message queue will unblock and return* ERROR.  When this function returns, <msgQId> is no longer a valid * message queue ID.** RETURNS: OK on success or ERROR otherwise.** ERRNO:* .iP "S_objLib_OBJ_ID_ERROR"* Message queue ID is invalid* .iP "S_intLib_NOT_ISR_CALLABLE"* Routine cannot be called from ISR* .iP "S_distLib_NO_OBJECT_DESTROY"* Deleting a distributed message queue is not permitted* .iP "S_smObjLib_NO_OBJECT_DESTROY"* Deleting a shared message queue is not permitted* SEE ALSO: msgQSmLib*/STATUS msgQDelete    (    MSG_Q_ID msgQId     /* message queue to delete */    )    {    return (msgQDestroy (msgQId, TRUE));    }/********************************************************************************* msgQDestroy - destroy message queue** RETURNS: OK or ERROR.** ERRNO: S_distLib_NO_OBJECT_DESTROY**/LOCAL STATUS msgQDestroy    (    MSG_Q_ID msgQId,    /* message queue to destroy */    BOOL     dealloc    /* deallocate memory associated with message queue */    )    {    Q_JOB_NODE *pNode;    FAST int	timeout;    FAST int	nMsgs;    int errnoCopy;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美酷刑日本凌虐凌虐| 91在线视频官网| 日韩一区在线免费观看| 欧美精选午夜久久久乱码6080| 国产综合久久久久影院| 亚洲国产aⅴ天堂久久| 久久久www成人免费毛片麻豆| 91香蕉视频污| 欧美精品xxxxbbbb| 成人黄页毛片网站| 蜜臀精品一区二区三区在线观看 | 91久久一区二区| 国内精品国产成人| 亚洲sss视频在线视频| 国产精品无人区| 欧美精品一区二区久久婷婷| 欧美午夜不卡视频| 99免费精品在线观看| 激情综合网最新| 日韩综合在线视频| 一区二区成人在线视频| 中文字幕va一区二区三区| 日韩一区二区三区电影在线观看 | 国产一区二区在线观看视频| 亚洲一区在线播放| 国产精品网站一区| 久久在线免费观看| 欧美大肚乱孕交hd孕妇| 91成人免费网站| 99在线精品视频| 国产91精品一区二区麻豆网站| 日韩av午夜在线观看| 一区二区三区国产豹纹内裤在线| 中文字幕免费在线观看视频一区| 久久综合色一综合色88| 日韩一区二区视频| 欧美一区二区三区四区高清| 欧美日韩另类一区| 欧美日韩一区不卡| 欧美日韩一级片网站| 91福利国产成人精品照片| 一本久道久久综合中文字幕| 国产91高潮流白浆在线麻豆 | 久久你懂得1024| 精品国产一区二区三区久久久蜜月| 91精品国产综合久久福利| 欧美日韩国产一区二区三区地区| 欧美伊人精品成人久久综合97| 欧美性受极品xxxx喷水| 欧美日韩久久不卡| 欧美一级在线免费| 精品成人在线观看| 久久精品在线观看| 中文字幕不卡在线播放| 一区二区中文视频| 一区二区久久久| 日韩精品一二三区| 极品美女销魂一区二区三区 | 青青草国产成人av片免费| 五月激情综合色| 秋霞国产午夜精品免费视频| 麻豆精品在线播放| 国产乱码一区二区三区| www.亚洲免费av| 91在线一区二区| 欧美日韩精品久久久| 日韩久久久久久| 日本一区二区三区视频视频| 亚洲欧美怡红院| 亚洲第一二三四区| 九一久久久久久| 成人av在线资源| 欧美视频一区二区三区在线观看 | 日韩高清一区二区| 激情久久五月天| av在线综合网| 欧美日本一区二区三区| 久久亚洲影视婷婷| 亚洲乱码国产乱码精品精98午夜| 婷婷久久综合九色综合绿巨人| 国产一区二区在线视频| 91碰在线视频| 日韩欧美国产系列| 国产精品电影院| 人禽交欧美网站| 91在线云播放| 精品久久久久久久久久久院品网| 亚洲欧洲精品一区二区三区不卡| 亚洲国产美女搞黄色| 精品一二三四在线| 91亚洲资源网| 日韩精品综合一本久道在线视频| 国产精品青草综合久久久久99| 亚洲成av人片| 99精品国产视频| 日韩欧美亚洲国产另类| 亚洲精品久久久蜜桃| 加勒比av一区二区| 欧美性大战久久久| 国产精品污www在线观看| 日韩中文字幕91| 一本到不卡免费一区二区| 日韩视频在线永久播放| 亚洲欧美色图小说| 国产精品香蕉一区二区三区| 欧美日韩高清在线播放| 中文字幕一区二区三| 免费在线观看视频一区| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩午夜在线观看| 亚洲国产精品人人做人人爽| 国产成人午夜电影网| 69堂成人精品免费视频| 亚洲精品视频在线看| 国产成人三级在线观看| 日韩欧美一区二区免费| 午夜av一区二区三区| 在线免费观看日本一区| 国产精品热久久久久夜色精品三区 | 亚洲成a人片在线观看中文| av成人动漫在线观看| 亚洲精品一区在线观看| 美女视频网站久久| 色噜噜狠狠色综合欧洲selulu| 国产精品入口麻豆原神| 国产一区二区三区四| 欧美美女激情18p| 亚洲国产精品一区二区久久 | 久久久蜜臀国产一区二区| 日本美女视频一区二区| 欧美日韩亚洲高清一区二区| 亚洲精品视频在线| 91在线视频播放| 亚洲欧洲日韩av| 波多野结衣91| 1024国产精品| 一本色道**综合亚洲精品蜜桃冫| 亚洲人成网站色在线观看| av网站免费线看精品| 亚洲欧洲精品一区二区精品久久久| 国产精品一二一区| 久久久精品中文字幕麻豆发布| 国精产品一区一区三区mba视频| 日韩欧美国产麻豆| 麻豆视频观看网址久久| 精品国产91九色蝌蚪| 国产在线一区二区综合免费视频| 日韩欧美电影在线| 国产乱码精品一区二区三区忘忧草| 久久天天做天天爱综合色| 国产一区二区伦理| 国产精品久久久久影视| 在线日韩一区二区| 天堂精品中文字幕在线| 欧美v亚洲v综合ⅴ国产v| 精品一区二区三区在线观看| 久久午夜免费电影| 成人国产精品免费观看| 亚洲欧美视频一区| 在线电影一区二区三区| 精品在线播放午夜| 国产精品视频线看| 91国内精品野花午夜精品| 亚洲网友自拍偷拍| 日韩欧美电影一区| 成人晚上爱看视频| 亚洲永久精品国产| 欧美成人在线直播| 成人深夜视频在线观看| 亚洲一区二区三区不卡国产欧美| 91精品福利在线一区二区三区 | 亚洲在线免费播放| 日韩女优av电影| 成人aaaa免费全部观看| 亚洲精品免费在线播放| 制服丝袜日韩国产| 国产91高潮流白浆在线麻豆| 一区二区三区欧美日| 91精品国产91热久久久做人人| 国产成人av一区| 亚洲妇女屁股眼交7| 久久精品在这里| 欧美视频完全免费看| 国产精品一二三区| 一区二区三区欧美激情| www久久精品| 欧美在线你懂的| 国产精品自产自拍| 亚洲午夜日本在线观看| 久久奇米777| 欧美精品日韩综合在线| 国产成人免费网站| 天堂蜜桃91精品| 国产精品麻豆99久久久久久| 欧美高清dvd| 91日韩精品一区| 国产成人av网站| 日本成人超碰在线观看| 亚洲视频小说图片| 欧美精品一区二区在线播放|