



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗5 定時器【實驗原理】timerfd是Linux為用戶程序提供的一個定時器接口。這個接口基于文件描述符,通過文件描述符的可讀事件進行超時通知,所以能夠被用于select/poll的應用場景。timerfd是linux內核2.6.25版本中加入的接口。timerfd、eventfd、signalfd配合epoll使用,可以構造出一個零輪詢的程序,但程序沒有處理的事件時,程序是被阻塞的。這樣的話在某些移動設備上程序更省電。clock_gettime函數(shù)可以獲取系統(tǒng)時鐘,精確到納秒。需要在編譯時指定庫:-lrt??梢垣@取兩種類型事件:CLOCK_REALTIME:相對時間,從1970.1.1到目
2、前的時間。更改系統(tǒng)時間會更改獲取的值。也就是,它以系統(tǒng)時間為坐標。CLOCK_MONOTONIC:與CLOCK_REALTIME相反,它是以絕對時間為準,獲取的時間為系統(tǒng)重啟到現(xiàn)在的時間,更改系統(tǒng)時間對齊沒有影響。timerfd_create:生成一個定時器對象,返回與之關聯(lián)的文件描述符。接收兩個入?yún)?,一個是clockid,填寫CLOCK_REALTIME或者CLOCK_MONOTONIC,參數(shù)意義同上。第二個可以傳遞控制標志:TFD_NONBLOCK(非阻塞),TFD_CLOEXEC(同O_CLOEXEC)注:timerfd的進度要比usleep要高。timerfd_settime:能夠啟動
3、和停止定時器;可以設置第二個參數(shù):flags,0表示是相對定時器,TFD_TIMER_ABSTIME表示是絕對定時器。第三個參數(shù)設置超時時間,如果為0則表示停止定時器。定時器設置超時方法:1、設置超時時間是需要調用clock_gettime獲取當前時間,如果是絕對定時器,那么需要獲取CLOCK_REALTIME,在加上要超時的時間。如果是相對定時器,要獲取CLOCK_MONOTONIC時間。2、數(shù)據(jù)結構: struct timespec time_t tv_sec; /* Seconds */ long tv_nsec; /* Nanoseconds */ ; struct itimerspe
4、c struct timespec it_interval; /* Interval for periodic timer */ struct timespec it_value; /* Initial expiration */ ; it_value是首次超時時間,需要填寫從clock_gettime獲取的時間,并加上要超時的時間。 it_interval是后續(xù)周期性超時時間,是多少時間就填寫多少。注意一個容易犯錯的地方:tv_nsec加上去后一定要判斷是否超出1000000000(如果超過要秒加一),否則會設置失敗。it_interval不為0則表示是周期性定時器。it_value和it_
5、interval都為0表示停止定時器。注:timerfd_create第一個參數(shù)和clock_gettime的第一個參數(shù)都是CLOCK_REALTIME或者CLOCK_MONOTONIC,timerfd_settime的第二個參數(shù)為0(相對定時器)或者TFD_TIMER_ABSTIME,三者的關系:1、如果timerfd_settime設置為TFD_TIMER_ABSTIME(決定時間),則后面的時間必須用clock_gettime來獲取,獲取時設置CLOCK_REALTIME還是CLOCK_MONOTONIC取決于timerfd_create設置的值。2、如果timerfd_settime設
6、置為0(相對定時器),則后面的時間必須用相對時間,就是: new_value.it_value.tv_nsec = 500000000; new_value.it_value.tv_sec = 3; new_value.it_interval.tv_sec = 0; new_value.it_interval.tv_nsec = 10000000;read函數(shù)可以讀timerfd,讀的內容為uint_64,表示超時次數(shù)?!緦嶒炘创a】#include #include #include #include #include #include /* Definition of uint64_t */
7、#define handle_error(msg) do perror(msg); exit(EXIT_FAILURE); while (0)static void print_elapsed_time(void) static struct timespec start; struct timespec curr; static int first_call = 1; int secs, nsecs; if (first_call) first_call = 0; if (clock_gettime(CLOCK_MONOTONIC, &start) = -1) handle_error(cl
8、ock_gettime); if (clock_gettime(CLOCK_MONOTONIC, &curr) = -1) handle_error(clock_gettime); secs = curr.tv_sec - start.tv_sec; nsecs = curr.tv_nsec - start.tv_nsec; if (nsecs 0) secs-; nsecs += 1000000000; printf(%d.%03d: , secs, (nsecs + 500000) / 1000000);Int main(int argc, char *argv) struct itime
9、rspec new_value; int max_exp, fd; struct timespec now; uint64_t exp, tot_exp; ssize_t s; if (argc != 2) & (argc != 4) fprintf(stderr, %s init-secs interval-secs max-expn, argv0); exit(EXIT_FAILURE); if (clock_gettime(CLOCK_REALTIME, &now) = -1) handle_error(clock_gettime); /* Create a CLOCK_REALTIME
10、 absolute timer with initial expiration and interval as specified in command line */ new_value.it_value.tv_sec = now.tv_sec + atoi(argv1); new_value.it_value.tv_nsec = now.tv_nsec; if (argc = 2) new_value.it_interval.tv_sec = 0; max_exp = 1; else new_value.it_interval.tv_sec = atoi(argv2); max_exp =
11、 atoi(argv3); new_value.it_interval.tv_nsec = 0; fd = timerfd_create(CLOCK_REALTIME, 0); if (fd = -1) handle_error(timerfd_create); if (timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL) = -1) handle_error(timerfd_settime); print_elapsed_time(); printf(timer startedn); for (tot_exp = 0; tot_exp max_exp;) s = read(fd, &exp, sizeof(uint64_t); if (s != sizeof
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于因子分析法的綠地集團盈利質量研究
- 基于差分隱私機制的分布式優(yōu)化算法研究
- 合股協(xié)議書范本合同范本
- 出租種菜棚子合同范本
- 商品轉包合同范本
- 化肥委托檢驗合同范本
- 刷墻施工合同范例
- 非物質文化遺產(chǎn)在小學美術課程中的教學資源開發(fā)研究
- 商業(yè)美食攝影合同范本
- 個人飾品轉賣合同范本
- 校園直飲水機供貨安裝及售后服務方案
- 廢氣處理系統(tǒng)改造及廢水處理系統(tǒng)改造項目可行性研究報告
- 大學物業(yè)服務月考核評價評分表
- 現(xiàn)代家政導論-課件 1.1.2認識家政學起源與發(fā)展
- 期末模擬測試卷(試卷)2024-2025學年六年級數(shù)學上冊人教版
- 2024屆護士資格考試必考基礎知識復習題庫及答案(共170題)
- 工業(yè)大數(shù)據(jù)算法賽項實際操作部分評分細則變更說明
- 小學生防性侵安全教育主題班會課件
- DBT29-305-2024 天津市裝配式建筑評價標準
- 背光異物改善8D
- 2024年五級咖啡師職業(yè)技能鑒定考試題庫(含答案)
評論
0/150
提交評論