linux定時(shí)器詳解_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、查看文章Linux定時(shí)器設(shè)置(一)2010041217:07定時(shí)器設(shè)置函數(shù)alarm設(shè)置的定時(shí)器只能精確到秒,而以下函數(shù)理論上可以精確到微妙:#include#includeintgetitimer(intwhichstructitimervalvalue)intsetitimer(intwhichconststructitimervalvaluestructitimervalovalue)函數(shù)setitimer可以提供三種定時(shí)器,它們

2、相互獨(dú)立,任意一個(gè)定時(shí)完成都將發(fā)送定時(shí)信號(hào)到進(jìn)程,并且自動(dòng)重新計(jì)時(shí)。參數(shù)which確定了定時(shí)器的類型,如表106所示:表106參數(shù)which與定時(shí)器類型取值含義信號(hào)發(fā)送ITIMER_REAL定時(shí)真實(shí)時(shí)間,與alarm類型相同。SIGALRMITIMER_VIRT定時(shí)進(jìn)程在用戶態(tài)下的實(shí)際執(zhí)行時(shí)間。SIGVTALRMITIMER_PROF定時(shí)進(jìn)程在用戶態(tài)和核心態(tài)下的實(shí)際執(zhí)行時(shí)間。SIGPROF這三種定時(shí)器定時(shí)完成時(shí)給進(jìn)程發(fā)送的信號(hào)各不相同,

3、其中ITIMER_REAL類定時(shí)器發(fā)送SIGALRM信號(hào),ITIMER_VIRT類定時(shí)器發(fā)送SIGVTALRM信號(hào),ITIMER_REAL類定時(shí)器發(fā)送SIGPROF信號(hào)。函數(shù)alarm本質(zhì)上設(shè)置的是低精確、非重載的ITIMER_REAL類定時(shí)器,它只能精確到秒,并且每次設(shè)置只能產(chǎn)生一次定時(shí)。函數(shù)setitimer設(shè)置的定時(shí)器則不同,它們不但可以計(jì)時(shí)到微妙(理論上),還能自動(dòng)循環(huán)定時(shí)。在一個(gè)Unix進(jìn)程中,不能同時(shí)使用alarm和ITIM

4、ER_REAL類定時(shí)器。結(jié)構(gòu)itimerval描述了定時(shí)器的組成:structitimervalstructtim.it_interval下次定時(shí)取值structtim.it_value本次定時(shí)設(shè)置值結(jié)構(gòu)tim.描述了一個(gè)精確到微妙的時(shí)間:structtim.longtv_sec秒(1000000微秒)longtv_usec微妙函數(shù)setitimer設(shè)置一個(gè)定時(shí)器,參數(shù)value指向一個(gè)itimerval結(jié)構(gòu),該結(jié)構(gòu)決定了設(shè)置的定時(shí)器信

5、息,結(jié)構(gòu)成員it_value指定首次定時(shí)的時(shí)間,結(jié)構(gòu)成員it_interval指定下次定時(shí)的時(shí)間。定時(shí)器工作時(shí),先將it_value的時(shí)間值減到0,發(fā)送一個(gè)信號(hào),再將it_value賦值為it_interval的值,重新開始定時(shí),如此反復(fù)。如果it_value值被設(shè)置為0,則定時(shí)器停止定時(shí);如果it_value值不為0但it_interval值為0,則定時(shí)器在一次定時(shí)后終止。函數(shù)setitimer調(diào)用成功時(shí)返回0,否則返回1,參數(shù)ova

6、lue如果不為空,返回上次的定時(shí)器狀態(tài)。函數(shù)getitimer獲取當(dāng)前的定時(shí)器狀態(tài),整型參數(shù)which指定了讀取的定時(shí)器類型,參數(shù)value返回定時(shí)器狀態(tài)。函數(shù)調(diào)用成功返回0,否則返回1。例1.設(shè)置一個(gè)定時(shí)器,每2.5秒產(chǎn)生一個(gè)SIGALRM信號(hào)。答:將itimerval結(jié)構(gòu)的成員it_interval和成員it_value均賦值為2.5秒即可:structitimervalvaluevalue.it_value.tv_sec=2val

7、ue.it_value.tv_usec=500000value.it_interval.tv_sec=2value.it_interval.tv_usec=500000setitimer(ITIMER_REAL函數(shù)setitimer設(shè)置的定時(shí)器可以重復(fù)定時(shí),無需多次調(diào)用。例2.設(shè)置一個(gè)定時(shí)器,進(jìn)程在用戶態(tài)下執(zhí)行1秒鐘后發(fā)出首次信號(hào),以后進(jìn)程每在用戶態(tài)下執(zhí)行3秒鐘,發(fā)送一個(gè)信號(hào)。答:將itimerval結(jié)構(gòu)的成員it_value均賦值為1

8、秒,成員it_interval賦值為3秒即可:structitimervalvaluevalue.it_value.tv_sec=1value.it_value.tv_usec=0value.it_interval.tv_sec=3value.it_interval.tv_usec=0setitimer(ITIMER_VIRT例3.取消一個(gè)ITIMER_PROF類定時(shí)器。答:將itimerval結(jié)構(gòu)的成員it_value均賦值為0秒即可

9、:structitimervalvaluevalue.it_value.tv_sec=1value.it_value.tv_usec=0setitimer(ITIMER_PROF例4.設(shè)置一個(gè)定時(shí)1.5秒的真實(shí)時(shí)間定時(shí)器,它僅發(fā)送一次信號(hào)就自動(dòng)取消。答:signal(SIGALRMsigalrm_hler)set_timer()while(count1000)exit(0)Linux下的定時(shí)器有兩種,以下分別介紹:1、alarm如果不要

10、求很精確的話,用alarm()和signal()就夠了unsignedintalarm(unsignedintseconds)函數(shù)說明:alarm()用來設(shè)置信號(hào)SIGALRM在經(jīng)過參數(shù)seconds指定的秒數(shù)后傳送給目前的進(jìn)程。如果參數(shù)seconds為0,則之前設(shè)置的鬧鐘會(huì)被取消,并將剩下的時(shí)間返回。返回值:返回之前鬧鐘的剩余秒數(shù),如果之前未設(shè)鬧鐘則返回0.alarm()執(zhí)行后,進(jìn)程將繼續(xù)執(zhí)行,在后期(alarm以后)的執(zhí)行過程中將會(huì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論