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

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

?? ss_task.c

?? 中國石油二期加油站IC系統(tǒng)后臺通訊軟件
?? C
?? 第 1 頁 / 共 4 頁
字號:


/********************************************************************20**
 
     Name:     System Services -- Task Management
 
     Type:     C source file
 
     Desc:     Source code for System Services functions for task mgmt.
 
     File:     ss_task.c
 
     Sid:      ss_task.c 1.3  -  10/14/98 14:22:22
 
     Prg:      kp
  
*********************************************************************21*/


/* header include files (.h) */

#include "envopt.h"        /* environment options */
#include "envdep.h"        /* environment dependent */
#include "envind.h"        /* environment independent */

#include "gen.h"           /* general layer */
#include "ssi.h"           /* system services */

#include "ss_err.h"        /* errors */
#include "ss_dep.h"        /* implementation-specific */
#include "ss_queue.h"      /* queues */
#include "ss_task.h"       /* tasking */
#include "ss_msg.h"        /* messaging */
#include "ss_mem.h"        /* memory management interface */
#include "ss_gen.h"        /* general */



/* header/extern include files (.x) */

#include "gen.x"           /* general layer */
#include "ssi.x"           /* system services */

#include "ss_dep.x"        /* implementation-specific */
#include "ss_queue.x"      /* queues */
#include "ss_task.x"       /* tasking */
#include "ss_timer.x"      /* timers */
#include "ss_strm.x"       /* STREAMS */
#include "ss_msg.x"        /* messaging */
#include "ss_mem.x"        /* memory management interface */
#include "ss_drvr.x"       /* driver tasks */
#include "ss_gen.x"        /* general */



/*
*
*       Fun:   SRegInit
*
*       Desc:  This function is used to register an initialization function
*              for the layer. The system services will invoke the function
*              passed to it one time. The initialization function will be
*              used by the layer to initilize the layer.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*
*       Notes:
*
*       File:  ss_task.c
*
*/

#ifdef ANSI
PUBLIC S16 SRegInit
(
Ent ent,                    /* entity */
Inst inst,                  /* instance */
PAIFS16 initFnct            /* initialization function */
)
#else
PUBLIC S16 SRegInit(ent, inst, initFnct)
Ent ent;                    /* entity */
Inst inst;                  /* instance */
PAIFS16 initFnct;           /* initialization function */
#endif
{
    TRC1(SRegInit);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS449, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }

    /* check initialization function */
    if (initFnct == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS450, ERRZERO, "Null pointer");
        RETVALUE(RFAILED);
    }
#endif


    /*  Activate initialization function. This uses hard-coded
     *  parameters.
     */
    (Void)(*initFnct)(ent, inst, DFLT_REGION, PWR_UP);


    RETVALUE(ROK);
} /* SRegInit */

/*
*
*       Fun:   SRegActvTsk
*
*       Desc:  This function is used to register an activation function
*              for the layer. The system services will invoke the
*              function passed to it whenever a task buffer is received.
*              The activation function will be used by the layer to receive
*              messages from other entities.  It allows a priority to be
*              associated with the task so that it can be preempted if
*              necessary.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes: We pass NULLP for the initialization function, because
*              it is assumed that whoever is using this call will also
*              be calling SRegInit().
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SRegActvTsk
(
Ent ent,                       /* entity */
Inst inst,                     /* instance */
Ttype ttype,                   /* task type */
Prior prior,                   /* task priority */
ActvTsk actvTsk                /* activate task function */
)
#else
PUBLIC S16 SRegActvTsk(ent, inst, ttype, prior, actvTsk)
Ent ent;                       /* entity */
Inst inst;                     /* instance */
Ttype ttype;                   /* task type */
Prior prior;                   /* task priority */
ActvTsk actvTsk;               /* activate task function */
#endif
{
    S16 ret;
    SSTskId sTskId;
    Prior spri;


    TRC1(SRegActvTsk);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS451, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }

    /* check activation function */
    if (actvTsk == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS452, ERRZERO, "Null pointer");
        RETVALUE(RFAILED);
    }

    /* check task type */
    if (ttype != TTNORM  &&  ttype != TTPERM)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS453, ERRZERO, "Invalid task type");
    }

    /* check task priority */
    if (prior > PRIOR3)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS454, ERRZERO, "Invalid task priority");
        RETVALUE(RFAILED);
    }
#endif


#if (ERRCLASS & ERRCLS_DEBUG)
    /* lock system task table */
    ret = SLock(&osCp.sTskTblLock);
    if (ret != ROK)
    {
        SSLOGERROR(ERRCLS_DEBUG, ESS455, ERRZERO,
                   "Could not lock system task table");
        RETVALUE(RFAILED);
    }

    /* lock TAPA task table */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {
        SUnlock(&osCp.sTskTblLock);
        SSLOGERROR(ERRCLS_DEBUG, ESS456, ERRZERO,
                   "Could not lock TAPA task table");
        RETVALUE(RFAILED);
    }

    /* check count of tasks */
    if (osCp.numTTsks == SS_MAX_TTSKS  ||  osCp.numSTsks == SS_MAX_STSKS)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SUnlock(&osCp.sTskTblLock);
        SSLOGERROR(ERRCLS_DEBUG, ESS457, ERRZERO, "Too many tasks");
        RETVALUE(ROUTRES);
    }

    /* check if entity and instance already registered */
    if (osCp.tTskIds[ent][inst] != SS_TSKNC)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SUnlock(&osCp.sTskTblLock);
        SSLOGERROR(ERRCLS_DEBUG, ESS458, ERRZERO,
                   "Entity and instance already registered");
        RETVALUE(RFAILED);
    }

    /* unlock tables */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
    SUnlock(&osCp.sTskTblLock);
#endif


    /* check and bump the priority if it is a permanent task */
    if (ttype == TTPERM)
    {
        prior = PRIOR3;
    }


    /*  Register this task as a TAPA task. We pass NULLP for the
     *  initialization function, because whoever is using this
     *  call (SRegActvTsk()) will also be calling SRegInit().
     */
    ret = SRegTTsk(ent, inst, ttype, prior, NULLP, actvTsk);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS459, (ErrVal) ret,
                   "Could not register task");
#endif
        RETVALUE(ret);
    }


    /*  Now we create a system task--one per TAPA task is the
     *  semantics of SRegActvTsk().
     */
    if (ttype == TTNORM)
        spri = SS_NORM_TSK_PRI;
    else
        spri = SS_PERM_TSK_PRI;

    ret = SCreateSTsk(spri, &sTskId);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS460, (ErrVal) ret,
                   "Could not create system task");
#endif

        SDeregTTsk(ent, inst);
        RETVALUE(ret);
    }


    /*  Attach the TAPA task we just registered, to the system
     *  task we just created.
     */
    ret = SAttachTTsk(ent, inst, sTskId);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS461, (ErrVal) ret,
                   "Could not attach TAPA task to system task");
#endif
        SDestroySTsk(sTskId);
        SDeregTTsk(ent, inst);
    }


    RETVALUE(ret);

} /* SRegActvTsk */



/*
*
*       Fun:   Deregister Initialize, task buffer and timer
*
*       Desc:  This function is used to deregister the initialization,
*              activation and timer functions for a task.
*
*       Ret:   ROK      - ok
*
*       Notes: None.
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SDeregInitTskTmr
(
Ent ent,                       /* entity */
Inst inst                      /* instance */
)
#else
PUBLIC S16 SDeregInitTskTmr(ent, inst)
Ent ent;                       /* entity */
Inst inst;                     /* instance */
#endif
{
    SsTTskEntry *tTsk;
    SsSTskEntry *sTsk;
    S16         ret;
    /* add by shang to avoid warning */
    SSTskId     sTskId = 0;
    /* add by shang to avoid warning over*/
    SsIdx       idx;
    Bool        destroySTsk;


    TRC1(SDeregInitTskTmr);


#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT  ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS462, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }
#endif


    /* lock the TAPA task table */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS463, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


#if (ERRCLASS & ERRCLS_INT_PAR)
    /* check whether this entity is registered */
    if (osCp.tTskIds[ent][inst] == SS_TSKNC)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SSLOGERROR(ERRCLS_INT_PAR, ESS464, ERRZERO, "Unknown task");
        RETVALUE(RFAILED);
    }
#endif


    /* get out the TAPA task entry */
    tTsk = &osCp.tTskTbl[osCp.tTskIds[ent][inst]];

    /* get out the system task that's running this TAPA task */
    sTsk = tTsk->sTsk;

    /* get out the ID of this system task */
    if (sTsk != NULLP)
    {
        sTskId = sTsk->tskId;
    }

    /* unlock the TAPA task table */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);


    /* deregister the TAPA task */
    if (SDeregTTsk(ent, inst) != ROK)
    {
        RETVALUE(RFAILED);
    }


    /* Now, if the TAPA task was attached, and nobody else is using that
     *  system task, we should destroy it.
     */
    if (sTsk != NULLP)
    {
        destroySTsk = FALSE;

        /* lock the system task table */
        ret = SLock(&osCp.sTskTblLock);
        if (ret != ROK)
        {

#if (ERRCLASS & ERRCLS_DEBUG)
            SSLOGERROR(ERRCLS_DEBUG, ESS465, (ErrVal) ret,
                       "Could not lock system task table");
#endif

            RETVALUE(RFAILED);
        }

        idx = (SsIdx) sTskId;
        sTsk = &osCp.sTskTbl[idx];

        /* check if the system task is still around */
        if (sTsk->used != TRUE)
        {
            SUnlock(&osCp.sTskTblLock);

            RETVALUE(ROK);
        }

        /* check if the system task is dying already */
        if (sTsk->termPend)
        {
            SUnlock(&osCp.sTskTblLock);

            RETVALUE(ROK);
        }


        /* If this system task entry has no more TAPA tasks attached,
         *  we destroy it, otherwise we do nothing.
         */
        if (sTsk->numTTsks == 0)
        {
            sTsk->termPend = TRUE;
            destroySTsk = TRUE;
        }


        /* unlock */
        SUnlock(&osCp.sTskTblLock);


        /* If we're destroying the system task, ask the implementation
         *  to do it.
         */
        if (destroySTsk)
        {
            ret = ssdDestroySTsk(sTsk);
            if (ret != ROK)
            {
                /* oops? */

#if (ERRCLASS & ERRCLS_DEBUG)
                SSLOGERROR(ERRCLS_DEBUG, ESS466, (ErrVal) ret,
                           "Could not destroy system task");
#endif

                RETVALUE(RFAILED);
            }
        }
    }


    RETVALUE(ROK);
} /* SDeregInitTskTmr */



/*
*
*       Fun:   Register a TAPA task
*
*       Desc:  This function is used to register a TAPA task,
*              and its initialization and activation functions.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*              ROUTRES  - failed, out of resources (optional)
*
*       Notes:
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SRegTTsk
(
Ent ent,                        /* entity */
Inst inst,                      /* instance */
Ttype type,                     /* task type */
Prior prior,                    /* task priority */
PAIFS16 initTsk,                /* initialization function */
ActvTsk actvTsk                 /* activation function */
)
#else
PUBLIC S16 SRegTTsk(ent, inst, type, prior, initTsk, actvTsk)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区a| 91成人在线精品| 亚洲综合av网| 久久久久国产免费免费 | 欧美军同video69gay| 国产精品77777竹菊影视小说| 亚洲第一搞黄网站| 国产精品久线观看视频| 日韩欧美国产综合一区 | 亚洲四区在线观看| 久久女同精品一区二区| 欧美剧情电影在线观看完整版免费励志电影| 国产东北露脸精品视频| 蜜桃久久av一区| 亚洲一级二级三级在线免费观看| 国产精品国产馆在线真实露脸| 精品粉嫩超白一线天av| 91 com成人网| 欧美日韩精品欧美日韩精品| 色综合久久久久综合体| 91精品国产丝袜白色高跟鞋| 成年人网站91| 国产成人精品影院| 国产尤物一区二区在线| 蜜臀国产一区二区三区在线播放 | 久久久久久免费| 日韩三级在线免费观看| 欧美老人xxxx18| 欧美日韩二区三区| 欧美在线观看禁18| 91黄色免费版| 在线看不卡av| 欧美图区在线视频| 欧美三级蜜桃2在线观看| 色呦呦国产精品| 色素色在线综合| 91精品办公室少妇高潮对白| 在线视频一区二区免费| 在线观看成人免费视频| 一道本成人在线| 色就色 综合激情| 欧洲av在线精品| 欧美日韩一区高清| 91精品啪在线观看国产60岁| 欧美精品乱码久久久久久按摩| 欧美色综合天天久久综合精品| 91视频在线观看免费| 色呦呦日韩精品| 欧美精品日日鲁夜夜添| 91精品国产欧美一区二区18 | 色婷婷综合久久久久中文一区二区| 色综合中文字幕| 91久久精品一区二区三区| 欧美影院精品一区| 制服.丝袜.亚洲.中文.综合| 日韩你懂的在线观看| 久久综合九色综合欧美98| 国产喂奶挤奶一区二区三区| 国产精品三级在线观看| 亚洲视频在线一区二区| 亚洲综合丁香婷婷六月香| 日韩av电影免费观看高清完整版| 男人操女人的视频在线观看欧美| 捆绑变态av一区二区三区| 国产精品亚洲视频| 91看片淫黄大片一级在线观看| 欧美亚洲另类激情小说| 在线成人免费观看| 久久久精品天堂| 亚洲男人的天堂在线aⅴ视频| 午夜精品福利一区二区蜜股av | 懂色一区二区三区免费观看| av一区二区三区| 欧美美女喷水视频| 久久久久久久网| 亚洲精品国久久99热| 蜜臀av性久久久久av蜜臀妖精| 国产精品影视在线| 欧美亚洲另类激情小说| 久久综合av免费| 一区二区三区四区激情| 国产精品女主播在线观看| 午夜电影网亚洲视频| 国产乱理伦片在线观看夜一区| 欧美国产日韩精品免费观看| 亚洲免费高清视频在线| 美国三级日本三级久久99| 91视频免费播放| 欧美一区二区三区啪啪| 国产精品第13页| 免费观看30秒视频久久| 99久久精品免费| 日韩免费在线观看| 亚洲综合久久av| av在线播放不卡| 精品福利一二区| 午夜电影网一区| 91无套直看片红桃| 久久亚洲精华国产精华液| 亚洲国产aⅴ成人精品无吗| 国产高清不卡一区二区| 91精品欧美一区二区三区综合在| 国产精品久久夜| 国产精品 欧美精品| 51精品国自产在线| 一区二区三区丝袜| 成人午夜av电影| 精品国产乱码久久久久久牛牛| 亚洲一区在线观看免费观看电影高清| 国产成人精品免费网站| 欧美一区欧美二区| 亚洲伊人伊色伊影伊综合网| 91色|porny| 欧美国产日韩一二三区| 韩国三级在线一区| 91精品在线免费| 亚洲a一区二区| 在线影院国内精品| 亚洲欧洲一区二区在线播放| 国产乱子轮精品视频| 51精品国自产在线| 亚洲mv在线观看| 欧美视频中文字幕| 亚洲激情自拍视频| 91香蕉视频mp4| 亚洲丝袜精品丝袜在线| 91丝袜高跟美女视频| 国产精品久久毛片a| 国产一区啦啦啦在线观看| 日韩精品一区二区三区在线| 日韩va亚洲va欧美va久久| 欧美人与禽zozo性伦| 亚洲成人av在线电影| 欧美亚洲综合在线| 性做久久久久久| 欧美疯狂做受xxxx富婆| 午夜精品久久久久久久久久久 | 国产一区 二区| 久久久www成人免费毛片麻豆| 九九九精品视频| 精品国产电影一区二区| 韩国av一区二区三区| 久久综合久久鬼色中文字| 国产精品自拍毛片| 日本一区二区成人在线| av激情成人网| 亚洲免费观看高清完整版在线| 91成人网在线| 午夜影视日本亚洲欧洲精品| 7777精品伊人久久久大香线蕉的 | 色又黄又爽网站www久久| 一区二区三区不卡视频| 欧美久久一二三四区| 久久99精品视频| 日韩电影在线观看电影| 日韩免费成人网| 国产成人在线观看| 国产精品免费视频观看| 在线观看免费亚洲| 日韩电影在线一区二区| 国产亚洲福利社区一区| 91在线视频官网| 日韩激情在线观看| 久久精品一区蜜桃臀影院| 99久久精品国产精品久久| 亚洲第四色夜色| 久久久久久久久久看片| 99久久er热在这里只有精品66| 亚洲国产视频a| 精品国一区二区三区| 成人性生交大片| 亚洲国产另类av| 久久精品一区二区三区av| 一本久道久久综合中文字幕| 亚洲成av人片一区二区三区| 26uuuu精品一区二区| 97se亚洲国产综合自在线不卡| 亚洲国产欧美日韩另类综合 | 国产精品欧美一区二区三区| 91久久香蕉国产日韩欧美9色| 九九精品视频在线看| 亚洲精品乱码久久久久久日本蜜臀| 欧美精品v国产精品v日韩精品 | 91精品国产综合久久香蕉的特点| 国产一二三精品| 午夜欧美大尺度福利影院在线看| 久久精品视频在线免费观看| 在线观看日韩高清av| 国产成a人亚洲| 日韩av在线发布| 亚洲欧洲精品天堂一级| 日韩亚洲欧美成人一区| 99久久免费国产| 久久99精品久久只有精品| 亚洲主播在线观看| 欧美高清在线一区二区| 日韩精品自拍偷拍| 欧美三级在线视频| 99久久婷婷国产| 国产成人av一区二区三区在线|