



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、.如何在Linux下實現(xiàn)定時器在Linux實現(xiàn)一個定時器,不像Win32下那樣直觀。在Win32調(diào)用SetTimer就行了,在Linux下則沒有相應(yīng)函數(shù)可以直接調(diào)用。定時器作為一個常用的功能,在Linux當(dāng)然也有相應(yīng)實現(xiàn)。下面我們看看幾種常用的方法。 要實現(xiàn)定時器功能,最土的辦法實現(xiàn)莫過于用sleep/usleep來實現(xiàn)了。當(dāng)然,它會阻塞當(dāng)前線程,除了處理定時功能外,什么活也干不了。當(dāng)然要解決這個問題不難,創(chuàng)建一個單獨的線程來負責(zé)定時器,其它線程負責(zé)正常的任務(wù)就行了。 要實現(xiàn)定時器功能,最簡單的辦法就是ALARM信號。這種方法簡單,也相應(yīng)的缺陷:用信號實現(xiàn)效率較低; 最小精
2、度為1秒,無法實現(xiàn)高精度的定義器。簡單示例:i nclude <stdio.h>i nclude <signal.h> static void timer(int sig) if(sig = SIGALRM) printf("timern"); return; int main(int ar
3、gc, char* argv) signal(SIGALRM, timer); alarm(1); getchar(); return 0; (setitimer和alarm有類似的功能,也是通過信號來實現(xiàn)) 最優(yōu)雅的方法是使用RTC機制。利用select函數(shù),你可以用單線程實現(xiàn)定時器,同時還可以處理其它任務(wù)。簡單示例: i nclude <stdio.h>i nclude
4、<linux/rtc.h>i nclude <sys/ioctl.h>i nclude <sys/time.h>i nclude <sys/types.h>i nclude <fcntl.h>i nclude <unistd.h>i nclude <errno.h> int main(int argc, char* argv) unsigned long i = 0; unsigned long data = 0;
5、160; int retval = 0; int fd = open ("/dev/rtc", O_RDONLY); if(fd < 0) perror("open"); exit(errno);
6、60; /*Set the freq as 4Hz*/ if(ioctl(fd, RTC_IRQP_SET, 4) < 0) perror("ioctl(RTC_IRQP_SET)"); close(fd); exit(er
7、rno); /*Set the freq as 4Hz*/ if(ioctl(fd, RTC_IRQP_SET, 4) < 0) perror("ioctl(RTC_IRQP_SET)"); close(fd);
8、; exit(errno); /* Enable periodic interrupts */ if(ioctl(fd, RTC_PIE_ON, 0) < 0) perror("ioctl(RTC_PIE_ON)");
9、160; close(fd); exit(errno); for(i = 0; i < 100; i+) if(read(fd, &data, sizeof(unsigned long) < 0)
10、60; perror("read"); close(fd); exit(errno);
11、 printf("timern"); /* Disable periodic interrupts */ ioctl(fd, RTC_PIE_OFF, 0); close(fd); return 0;*調(diào)用setitimer安裝定時器: 它有三個參數(shù)第一個設(shè)ITIMER_REAL,第二和三個參數(shù)是新的時
12、鐘間隔和之前設(shè)置的時鐘間隔。 struct itimerval struct timeval it_interval; /設(shè)為時鐘間隔 struct timeval it_value; /設(shè)為第一次觸發(fā)的時鐘間隔,其實只被執(zhí)行一次,以后按照it_interval的值 下面是一個具體的例子i nclude <stdio.h&
13、gt;i nclude <time.h>i nclude <sys/time.h>i nclude <stdlib.h>i nclude <signal.h>int count = 0;void set_timer() struct itimerval itv, oldtv; itv.it_interval.tv_sec = 1;
14、160; itv.it_interval.tv_usec = 0; itv.it_value.tv_sec = 5; itv.it_value.tv_usec = 0; setitimer(ITIMER_REAL, &itv, &oldtv);void sigalrm_handler(int sig) count+; printf("timer signal. %dn", count);int main() signal(SIGALRM, si
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省忻州地區(qū)2023-2024學(xué)年七年級下學(xué)期期中雙減成果展示數(shù)學(xué)試卷(含解析)
- 全球造紙市場供需趨勢考核試卷
- 印刷過程余熱回收技術(shù)考核試卷
- 生產(chǎn)效率提升策略考核試卷
- 紙質(zhì)包裝的防水防油技術(shù)研究考核試卷
- 2025年中國PEV薄膜數(shù)據(jù)監(jiān)測報告
- 2025年中國DVI產(chǎn)品數(shù)據(jù)監(jiān)測研究報告
- 2025年中國60匙位智能鑰匙管理系統(tǒng)主機數(shù)據(jù)監(jiān)測報告
- 2025年中國16支棉紗數(shù)據(jù)監(jiān)測報告
- 2025至2030年中國高濃度聚合硫酸鐵市場分析及競爭策略研究報告
- 計量經(jīng)濟學(xué)論文eviews
- 優(yōu)生優(yōu)育課件-提高生育健康水平
- 父母與高中生之間的協(xié)議書
- 2022年韶關(guān)市法院系統(tǒng)招聘考試真題
- 2022年江蘇省射陽中等專業(yè)學(xué)校工作人員招聘考試真題
- 高中英語新課程標(biāo)準(zhǔn)試題含答案(四套)
- 公安院校公安專業(yè)招生體檢表
- 警務(wù)輔助人員考試真題及答案
- 2023年安龍縣體育教師招聘筆試模擬試題及答案
- GB/T 27922-2011商品售后服務(wù)評價體系
- GA/T 168-2019法醫(yī)學(xué)機械性損傷尸體檢驗規(guī)范
評論
0/150
提交評論