亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 為什么在設(shè)置定時器之后要加個死循環(huán) [打印本頁]

作者: 暗底    時間: 2007-12-30 12:34
標題: 為什么在設(shè)置定時器之后要加個死循環(huán)
代碼如下
int n=0;
void fun()
{
      fprintf(stdout,"%d\n", n++);
     signal(SIGALRM, fun);
     alarm(1);
}

int main()
{
    signal(SIGALRM, fun);
    alarm(1);
    while(1)
       ;
}

為什么要加while(1)啊?  執(zhí)行完alarm之后不是得調(diào)用fun么? 然后就在fun里循環(huán)了,  這個while(1)有什么用啊?
我把它去掉的話,就什么也不輸出,  我把它換成sleep(1); 就輸出一個結(jié)果.  迷惑!
作者: 放驢娃    時間: 2007-12-30 12:44
搞清楚每個動詞的語義,就明白了。
作者: 暗底    時間: 2007-12-30 12:56
哦,好象明白了,  也就是定時的1秒中時間內(nèi) 程序還是往下執(zhí)行的,  如果不死循環(huán)一下,程序就提前結(jié)束了,  謝謝樓上的!   我剛開始學, 問的問題 可能太簡單了, 大家都不愛理我...
作者: cjaizss    時間: 2007-12-30 13:41
while(1)
       ;
這種死循環(huán)在真實的程序里請不要出現(xiàn)。
while(1)pause();
要好的多
作者: 暗底    時間: 2007-12-30 13:47
pause是站停的意思吧? 那while(1) 還有用么?直接pause就行吧
作者: scutan    時間: 2007-12-30 14:01
標題: 回復 #5 暗底 的帖子
因為你的定時器是每隔一秒觸發(fā)一次, 如果沒有while(1)的話, 你發(fā)生了一次定時器中斷之后就繼續(xù)往后面執(zhí)行了, 此時就可能退出了整個程序了.
作者: 暗底    時間: 2007-12-30 14:37
剛才試了一下,確實是這么回事,  明白了...多謝!!!!
作者: yecheng_110    時間: 2007-12-30 15:58
原帖由 cjaizss 于 2007-12-30 13:41 發(fā)表
while(1)
       ;
這種死循環(huán)在真實的程序里請不要出現(xiàn)。
while(1)pause();
要好的多

記得apue里也是這樣用的
DESCRIPTION
       The pause() library function causes the invoking process (or thread) to
       sleep until a signal is received that either terminates it or causes it
       to call a signal-catching function.
作者: 暗底    時間: 2007-12-30 17:17
APUE 你們都看英文版的啊?  真厲害!
作者: 暗底    時間: 2007-12-30 18:56
setitimer 這個函數(shù) 下面跟著的那個while(1) 里面就不能放pause();   這個pause到底起個啥作用啊




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2