日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

alarm函数

發布時間:2023/11/30 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 alarm函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

alarm函數???

設置定時器(鬧鐘)。在指定seconds后,內核會給當前進程發送14)SIGALRM信號。進程收到該信號,默認動作終止。

每個進程都有且只有唯一個定時器。

unsigned int alarm(unsigned int seconds); 返回0或剩余的秒數,無失敗。

?????? 常用:取消定時器alarm(0),返回舊鬧鐘余下秒數。

?????? 例:alarm(5) → 3sec → alarm(4) → 5sec → alarm(5) → alarm(0)

??? 定時,與進程狀態無關(自然定時法)!就緒、運行、掛起(阻塞、暫停)、終止、僵尸...無論進程處于何種狀態,alarm都計時。

練習:編寫程序,測試你使用的計算機1秒鐘能數多少個數。?? ??????????????????????????? ????????????? 【alarm .c】

?????? 使用time命令查看程序執行的時間。???? 程序運行的瓶頸在于IO,優化程序,首選優化IO。

?????? 實際執行時間 = 系統時間 + 用戶時間 + 等待時間

?

/*** alarm.c ***/ #include<stdio.h> #include<unistd.h>int main() {int i;alarm(1);for(i = 0; ; i++){printf("%d\n",i);}return 0; }
/*** my_alarm.c ***/ #include<stdio.h> #include<sys/time.h> #include<stdlib.h> #include<unistd.h>/* struct itimerval{struct timeval{it_value.tv_sec;it_value.tv_usec;}it_interval;struct timerval{it_value.tv_sec;it_value.tv_usec;}it_value; }it,oldit;*/ unsigned int my_alarm(unsigned int sec) {struct itimerval it,oldit;int ret;it.it_value.tv_sec = sec;it.it_value.tv_usec = sec;it.it_interval.tv_sec = sec;it.it_interval.tv_usec = sec;ret = setitimer(ITIMER_REAL,&it,&oldit);if(-1 == ret){perror("setitimer");exit(1);}return oldit.it_value.tv_sec;}int main() {int i;my_alarm(1);for(i = 0; ; i++){printf("i = %d\n",i);}return 0; }

?

setitimer函數

???????? 設置定時器(鬧鐘)。 可代替alarm函數。精度微秒us,可以實現周期定時。

??? int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value);??? 成功:0;失敗:-1,設置errno

???????? 參數:which:指定定時方式

????????????????? ① 自然定時:ITIMER_REAL → 14)SIGLARM?????????????????????????? ?????????????? 計算自然時間

????????????????? ② 虛擬空間計時(用戶空間):ITIMER_VIRTUAL → 26)SIGVTALRM? ? ?只計算進程占用cpu的時間

????????????????? ③ 運行時計時(用戶+內核):ITIMER_PROF → 27)SIGPROF????????? 計算占用cpu及執行系統調用的時間

練習: 使用setitimer函數實現alarm函數,重復計算機1秒數數程序。????????????? ???????? ???????? ???????? 【setitimer.c】

拓展練習,結合man page編寫程序,測試it_interval、it_value這兩個參數的作用。???? ???????? 【setitimer1.c】

提示:??? it_interval:用來設定兩次定時任務之間間隔的時間。

???????? ??????? ???????? ???????? it_value:定時的時長????????????????????????????

兩個參數都設置為0,即清0操作。

?

raise和abort函數

?????? raise 函數:給當前進程發送指定信號(自己給自己發)?? raise(signo) == kill(getpid(), signo);

??? ?????? int raise(int sig); 成功:0,失敗非0值

?????? abort 函數:給自己發送異常終止信號 6) SIGABRT 信號,終止并產生core文件

??? ?????? void abort(void); 該函數無返回

?

轉載于:https://www.cnblogs.com/wanghao-boke/p/11332617.html

總結

以上是生活随笔為你收集整理的alarm函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。