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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? signal.cxx

?? ecos實時嵌入式操作系統
?? CXX
?? 第 1 頁 / 共 3 頁
字號:
    // the one supplied.    sigset_t old = self->sigmask;    self->sigmask = *set;    // Loop until a signal gets delivered    while( !cyg_deliver_signals() )        signal_sigwait.wait();    self->sigmask = old;        signal_mutex.unlock();        SIGNAL_RETURN(EINTR);}    // -------------------------------------------------------------------------// Wait for a signal in set to arrive// Implement this as a variant on sigtimedwait().externC int sigwait  (const sigset_t *set, int *sig){    SIGNAL_ENTRY();    siginfo_t info;        int ret = sigtimedwait( set, &info, NULL );    if( ret == -1 )        SIGNAL_RETURN(errno);    *sig = ret;        SIGNAL_RETURN(0);}// -------------------------------------------------------------------------// Do the same as sigwait() except return a siginfo_t object too.// Implement this as a variant on sigtimedwait().externC int sigwaitinfo  (const sigset_t *set, siginfo_t *info){    SIGNAL_ENTRY();    int ret = sigtimedwait( set, info, NULL );        SIGNAL_RETURN_VALUE(ret);}// -------------------------------------------------------------------------// Wait either for a signal in the given set to become pending, or// for the timeout to expire. If timeout is NULL, wait for ever.externC int sigtimedwait  (const sigset_t *set, siginfo_t *info,                           const struct timespec *timeout){    SIGNAL_ENTRY();    // check for cancellation first.    pthread_testcancel();    int err = 0;    cyg_tick_count ticks;    if( timeout == NULL ) ticks = 0;    else ticks = cyg_timespec_to_ticks( timeout ) +             Cyg_Clock::real_time_clock->current_value();    pthread_info *self = pthread_self_info();        signal_mutex.lock();    sigset_t todo;    // Wait for a signal in the set to become pending    while( (todo = (*set & (sig_pending | self->sigpending))) == 0 )    {        // If timeout is not NULL, do a timed wait on the        // sigwait condition variable. If it is NULL - wait        // until we are woken.        if( timeout )        {            if( ticks == 0 || !signal_sigwait.wait(ticks) )            {                // If the timeout is actually zero, or we have waited and                // timed out, then we must quit with an error.                err = EAGAIN;                break;            }        }        else {            if ( !signal_sigwait.wait() ) {                // check we weren't woken up forcibly (e.g. to be cancelled)                // if so, pretend it's an error                err = EAGAIN;                break;            }        }                // Special case check for SIGALRM since the fact SIGALRM is masked        // would have prevented it being set pending in the alarm handler.        check_sigalarm();        cyg_posix_timer_asr(self);    }    if( err == 0 )    {        // There is a signal in the set that is pending: deliver        // it. todo contains a mask of all the signals that could be        // delivered now, but we only want to deliver one of them.        int signo = 0;        // Select the lowest numbered signal from the todo mask        HAL_LSBIT_INDEX( signo, todo );        signal_state *ss = &sigstate[signo];        sigset_t sigbit = 1L<<signo;        if( (ss->sa.sa_flags & SA_SIGINFO) && (ss->pending != NULL) )        {            // If the SA_SIGINFO bit is set, then there            // will be a signal_info object queued on the            // pending field.            signal_info *si = ss->pending->next;            *info = si->si;            // Remove the head signal_info object from the            // circular list.             if( ss->pending == si )                ss->pending = NULL;            else                ss->pending->next = si->next;                            si->next = siginfo_next;            siginfo_next = si;                        }        else        {            // Not a queued signal, or there is no signal_info object            // on the pending queue: fill in info structure with            // default values.            info->si_signo           = signo;            info->si_code            = SI_USER;            info->si_value.sival_int = 0;        }        // Clear the bit from the pending masks. If the pending        // queue is not empty, leave the bits set, otherwise clear        // them.                if( ss->pending == NULL )        {            // Clear the bit in both masks regardless of which            // one it actually came from. This is cheaper than            // trying to find out.            sig_pending &= ~sigbit;            self->sigpending &= ~sigbit;        }        // all done    }        signal_mutex.unlock();    pthread_testcancel();    if (err)        SIGNAL_RETURN(err);    else        SIGNAL_RETURN_VALUE( info->si_signo );}//==========================================================================// alarm, pause and sleep// -------------------------------------------------------------------------// Generate SIGALRM after some number of secondsexternC unsigned int alarm( unsigned int seconds ){    int res = 0;    struct timespec tv;    cyg_tick_count trigger, interval;    SIGNAL_ENTRY();    signal_mutex.lock();    if( sigalrm_armed )    {        sigalrm_alarm.disable();        sigalrm_alarm.get_times( &trigger, &interval );        // Convert trigger time back to interval        trigger -= Cyg_Clock::real_time_clock->current_value();                cyg_ticks_to_timespec( trigger, &tv );        res = tv.tv_sec;                sigalrm_armed = false;    }    if( seconds != 0 )    {        // Here we know that the sigalrm_alarm is unarmed, set it up        // to trigger in the required number of seconds.        tv.tv_sec = seconds;        tv.tv_nsec = 0;        trigger = cyg_timespec_to_ticks( &tv );        // Convert trigger interval to absolute time        trigger += Cyg_Clock::real_time_clock->current_value();                sigalrm_alarm.initialize( trigger, 0 );        sigalrm_armed = true;    }        signal_mutex.unlock();    CYG_REPORT_RETVAL(res);        return res;}// -------------------------------------------------------------------------// Wait for a signal to be delivered.externC int pause( void ){    SIGNAL_ENTRY();    signal_mutex.lock();    // Check for any pending signals that can be delivered and    // if there are none, wait for a signal to be generated    if( !cyg_deliver_signals() )        signal_sigwait.wait();    // Now check again for some signals to deliver    cyg_deliver_signals();        signal_mutex.unlock();        SIGNAL_RETURN(EINTR);}//==========================================================================// Signal sets// -------------------------------------------------------------------------// Clear all signals from set.externC int sigemptyset  (sigset_t *set){    SIGNAL_ENTRY();    *set = 0;        SIGNAL_RETURN(0);}    // -------------------------------------------------------------------------// Set all signals in set.externC int sigfillset  (sigset_t *set){    SIGNAL_ENTRY();    *set = ~0;        SIGNAL_RETURN(0);}    // -------------------------------------------------------------------------// Add signo to set.externC int sigaddset  (sigset_t *set, int signo){    SIGNAL_ENTRY();    int err = 0;        if( !SIGNAL_VALID(signo) )        err = EINVAL;    else *set |= 1<<signo;        SIGNAL_RETURN(err);}    // -------------------------------------------------------------------------// Remove signo from set.externC int sigdelset  (sigset_t *set, int signo){    SIGNAL_ENTRY();    int err = 0;        if( !SIGNAL_VALID(signo) )        err = EINVAL;    else *set &= ~(1<<signo);        SIGNAL_RETURN(err);}    // -------------------------------------------------------------------------// Test whether signo is in setexternC int sigismember  (const sigset_t *set, int signo){    SIGNAL_ENTRY();    int ret = 0;        if( !SIGNAL_VALID(signo) )        SIGNAL_RETURN(EINVAL);    if( *set & (1<<signo) ) ret = 1;    CYG_REPORT_RETVAL( ret );    return ret;}//==========================================================================// ISO C compatibility functions// -------------------------------------------------------------------------// Installs a new signal handler for the specified signal, and returns// the old handlerexternC sa_sighandler_t signal(int sig, sa_sighandler_t handler){    SIGNAL_ENTRY();    int err;    sa_sighandler_t ret;    struct sigaction new_action;    struct sigaction old_action;    sigemptyset( &new_action.sa_mask );    new_action.sa_flags = 0;    new_action.sa_handler = handler;    err = sigaction( sig, &new_action, &old_action );    if( err < 0 )        ret = SIG_ERR;    else ret = old_action.sa_handler;        CYG_REPORT_RETVAL( ret );    return ret;    }// -------------------------------------------------------------------------// raise() - ISO C 7.7.2 ////// Raises the signal, which will cause the current signal handler for// that signal to be calledexternC int raise(int sig){    return kill( 0, sig );}// -------------------------------------------------------------------------// siglongjmp()// Restores signal mask and longjumps.__externC void siglongjmp( sigjmp_buf env, int val ){    CYG_REPORT_FUNCNAME( "siglongjmp" );    CYG_REPORT_FUNCARG2( "&env=%08x, val=%d", &env, val );    // ISO C says that if we are passed val == 0, then we change it to 1    if( val == 0 )        val = 1;    if( env[0].__savemask )        pthread_sigmask( SIG_SETMASK, &env[0].__sigsavemask, NULL );        HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering    hal_longjmp( env[0].__jmp_buf, val );    HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering#ifdef CYGDBG_USE_ASSERTS    CYG_ASSERT( 0, "siglongjmp should not have reached this point!" );#else    for (;;)        CYG_EMPTY_STATEMENT;#endif    }#endif // ifdef CYGPKG_POSIX_SIGNALS// -------------------------------------------------------------------------// EOF signal.cxx

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区视频在线| 欧美日韩aaaaa| 成人午夜电影久久影院| 欧美日韩亚洲综合一区| 国产欧美一区二区精品仙草咪| 免费看欧美美女黄的网站| 欧美日韩午夜精品| 日本一区二区三区免费乱视频| 男女男精品视频网| 日韩午夜在线观看视频| 美女视频黄a大片欧美| 欧洲精品在线观看| 自拍偷拍亚洲欧美日韩| 在线日韩国产精品| 午夜精品一区在线观看| 欧美喷水一区二区| 欧美aaa在线| 中文字幕高清不卡| 国产精品亚洲成人| 国产精品对白交换视频| jvid福利写真一区二区三区| 国产精品传媒视频| 成人激情视频网站| 亚洲免费观看高清完整| 99精品久久久久久| 17c精品麻豆一区二区免费| 91在线你懂得| 日韩专区一卡二卡| 日韩欧美一级二级三级| 不卡免费追剧大全电视剧网站| 一色屋精品亚洲香蕉网站| 成人午夜电影小说| 国产精品久久久久永久免费观看| 在线观看视频一区| 亚洲第四色夜色| 亚洲视频一二三| 91精品国产欧美一区二区成人| 亚洲人成7777| 精品国内二区三区| 51精品秘密在线观看| 一本大道久久a久久综合婷婷| 免费观看久久久4p| 午夜天堂影视香蕉久久| 精品日产卡一卡二卡麻豆| 一本一道综合狠狠老| 亚洲电影激情视频网站| 亚洲午夜一区二区| 伊人一区二区三区| 亚洲欧洲精品天堂一级| 国产精品无人区| 日韩精品一区二区三区视频播放| 欧美精品777| 国产精品99久久久久久久vr| 极品少妇xxxx精品少妇偷拍 | 国产午夜精品美女毛片视频| 欧美午夜寂寞影院| av网站免费线看精品| 蜜桃av噜噜一区二区三区小说| 亚洲夂夂婷婷色拍ww47| 亚洲综合在线视频| 精品久久一区二区三区| 欧美精品丝袜久久久中文字幕| 成人av在线影院| eeuss影院一区二区三区| 国产精品1区2区| 不卡一二三区首页| 国内成人免费视频| 免费在线一区观看| 日韩高清在线观看| 亚洲国产精品久久不卡毛片| 国产精品九色蝌蚪自拍| 国产喷白浆一区二区三区| 国产色爱av资源综合区| 亚洲国产经典视频| 悠悠色在线精品| 99精品久久久久久| 欧美在线视频你懂得| 56国语精品自产拍在线观看| 日韩一区二区三区四区| 日本一区二区三区四区 | 欧美日韩一区二区三区视频| 欧洲国内综合视频| 久久精品亚洲精品国产欧美| 一区二区三区 在线观看视频| 免费看日韩a级影片| 国产成人亚洲综合a∨猫咪| 色呦呦网站一区| 久久久不卡网国产精品二区| 一区二区三区日韩精品视频| 日本成人在线一区| 91传媒视频在线播放| 日韩欧美一区二区免费| 中文字幕亚洲成人| 午夜视频在线观看一区二区三区| 国产成人aaa| 91精品国产麻豆国产自产在线 | 婷婷六月综合网| 欧美高清你懂得| 亚洲少妇最新在线视频| 青草国产精品久久久久久| 成人精品在线视频观看| 欧美成人精品1314www| 一区二区三区在线视频免费| 看电影不卡的网站| 欧美又粗又大又爽| 一区二区不卡在线播放 | 久久久综合网站| 蜜桃视频一区二区| 26uuu国产日韩综合| 精品中文字幕一区二区小辣椒| 久久婷婷久久一区二区三区| 男男成人高潮片免费网站| 久久久综合精品| 国产精品一区久久久久| 欧美亚洲综合在线| 中文字幕精品一区二区三区精品| 不卡一区二区在线| 国产午夜精品一区二区三区四区| 看片的网站亚洲| 欧美一级理论片| 国产乱子伦视频一区二区三区| 欧美一区二区三区爱爱| 国产高清久久久久| 久久先锋影音av| 丁香六月久久综合狠狠色| 亚洲国产综合在线| 国产片一区二区| 91在线一区二区三区| 亚洲午夜久久久久| 日韩欧美一区二区免费| 成人免费视频播放| 亚洲v中文字幕| 国产精品欧美综合在线| 在线观看亚洲精品| 国产传媒久久文化传媒| 狂野欧美性猛交blacked| 综合精品久久久| 26uuu色噜噜精品一区二区| 在线成人av影院| 91亚洲精品一区二区乱码| 人妖欧美一区二区| 一区二区视频免费在线观看| 日韩你懂的电影在线观看| 91美女在线观看| 免费视频最近日韩| 亚洲第一会所有码转帖| 一区二区三区在线视频免费观看 | 蜜桃视频在线一区| 日本欧美一区二区三区乱码 | 欧美日韩国产综合视频在线观看| 成人激情校园春色| 丰满白嫩尤物一区二区| 免费观看久久久4p| 日韩精品亚洲一区二区三区免费| 性做久久久久久免费观看| 亚洲乱码国产乱码精品精可以看| 精品久久五月天| 国产视频一区不卡| 国产精品久久国产精麻豆99网站| 久久综合九色综合97婷婷女人| 欧美三级日韩三级| 欧洲国产伦久久久久久久| 色婷婷国产精品综合在线观看| 欧日韩精品视频| 欧美一区三区四区| 欧美日韩一区视频| 日韩一级黄色大片| 欧美片在线播放| 日韩精品一区二区在线| 欧美日韩成人综合| 国产精品私房写真福利视频| 欧美videofree性高清杂交| 欧美三区在线观看| 日韩欧美一级二级三级久久久 | 蜜桃视频第一区免费观看| 一区二区在线电影| 免费成人av在线| 日本道免费精品一区二区三区| 欧美高清激情brazzers| 国产亚洲va综合人人澡精品| 亚洲综合一区在线| 精品一区二区三区在线视频| 97久久人人超碰| 国产精品―色哟哟| 一区二区三区四区乱视频| 美女在线观看视频一区二区| 国产精品18久久久久久久久久久久 | 日本精品一区二区三区四区的功能| 欧美日韩高清影院| 亚洲黄色片在线观看| 国产成人欧美日韩在线电影| gogogo免费视频观看亚洲一| 日韩欧美一区二区三区在线| 成人欧美一区二区三区小说 | 久久影院视频免费| 亚洲图片有声小说| 欧美亚洲国产怡红院影院| 国产精品免费网站在线观看| 日本91福利区| 日韩欧美一二区|