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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

6、lue如果不為空,返回上次的定時器狀態(tài)。函數(shù)getitimer獲取當前的定時器狀態(tài),整型參數(shù)which指定了讀取的定時器類型,參數(shù)value返回定時器狀態(tài)。函數(shù)調用成功返回0,否則返回1。例1.設置一個定時器,每2.5秒產(chǎn)生一個SIGALRM信號。答:將itimerval結構的成員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設置的定時器可以重復定時,無需多次調用。例2.設置一個定時器,進程在用戶態(tài)下執(zhí)行1秒鐘后發(fā)出首次信號,以后進程每在用戶態(tài)下執(zhí)行3秒鐘,發(fā)送一個信號。答:將itimerval結構的成員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.取消一個ITIMER_PROF類定時器。答:將itimerval結構的成員it_value均賦值為0秒即可

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

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

溫馨提示

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

評論

0/150

提交評論