linux下的定時器有兩種,以下分別介紹:
1、alarm
如果不要求很精確的話,用 alarm() 和 signal() 就夠了
unsigned int alarm(unsigned int seconds)
專門為sigalrm訊號而設,在指定的時間seconds秒後,將向程序本身傳送sigalrm訊號,又稱為鬧鐘時間。程序呼叫alarm後,任何以前的alarm()呼叫都將無效。如果引數seconds為零,那麼程序內將不再包含任何鬧鐘時間。如果呼叫alarm()前,程序中已經設定了鬧鐘時間,則返回上乙個鬧鐘時間的剩餘時間,否則返回0。
示例:
#include
#include
#include
void sigalrm_fn(int sig)
int main(void)
2、setitimer
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
setitimer()比alarm功能強大,支援3種型別的定時器:
itimer_real : 以系統真實的時間來計算,它送出sigalrm訊號。
itimer_virtual : 以該行**正有執行的時間來計算,它送出sigvtalrm訊號。
itimer_prof : 以行**正有執行及在核心中所費的時間來計算,它送出sigprof訊號。
setitimer()第乙個引數which指定定時器型別(上面三種之一);第二個引數是結構itimerval的乙個例項;第三個引數可不做處理。
setitimer()呼叫成功返回0,否則返回-1。
下面是關於setitimer呼叫的乙個簡單示範,在該例子中,每隔一秒發出乙個sigalrm,每隔0.5秒發出乙個sigvtalrm訊號::
#include
#include
#include
#include
#include
#include
int sec;
void sigroutine(int signo)
return;
}int main()
該例子的螢幕拷貝如下:
localhost:~$ ./timer_test
process id is 579
catch a signal – sigvtalrm
catch a signal – sigalrm
catch a signal – sigvtalrm
catch a signal – sigvtalrm
catch a signal – sigalrm
catch a signal –gvtalrm
注意:linux訊號機制基本上是從unix系統中繼承過來的。早期unix系統中的訊號機制比較簡單和原始,後來在實踐中暴露出一些問題,因此,把那些建立在早期機制上的訊號叫做"不可靠訊號",訊號值小於sigrtmin(red hat 7.2中,sigrtmin=32,sigrtmax=63)的訊號都是不可靠訊號。這就是"不可靠訊號"的**。它的主要問題是:程序每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理;因此,使用者如果不希望這樣的操作,那麼就要在訊號處理函式結尾再一次呼叫signal(),重新安裝該訊號。
Linux下的定時器
1.alarm 執行後,程序將繼續執行。在後期 alarm以後 的執行過程中將會在seconds秒後收到訊號sigalrm並執行其處理函式。include include include void sigalrm fn int sig int main void 2.alarm定時器,可是僅僅能精確...
linux下的「定時器」 crontab
crontab是用來設定在固定時間點或時間間隔執行某條指令,類似於時程表。使用 u user是指定user使用者的時程表。e username 調出編輯器,編輯定時任務,開啟後裡邊有多重文字編輯器,可更具自己偏好選擇,若未指定username,則是當前shell下的使用者 r username 刪除...
linux下的定時器的使用
ifdef linux evn socket include include include include include include include include include include endif 傳送back硬按鍵定時器的標誌位 static int flag back tim...