linux定時函式介紹:
在程式開發過程中,我們時不時要用到一些定時器,通常如果時間精度要求不高,可以使用sleep,uslepp函式讓程序睡眠一段時間來實現定時,
前者單位為秒(s),後者為微妙(us);但有時候我們又不想讓程序睡眠阻塞在哪兒,我們需要程序正常執行,當到達規定的時間時再去執行相應的操作,
在linux下面我們一般使用alarm函式跟setitimer函式來實現定時功能;
下面對這兩個函式進行詳細分析:
(1)alarm函式
alarm也稱為鬧鐘函式,它可以在程序中設定乙個定時器,當定時器指定的時間到時,它向程序傳送sigalrm訊號;
alarm函式原型如下:
1 unsigned int alarm(unsigned int seconds);
2 3 //seconds 為指定的秒數
返回值:
出錯:-1
下面是alarm()函式的簡單例子:
1 #include 2 #include 3 #include 4 #include 5
6 void func()
7 10
11 int main()
12
(2)setitimer()函式
在linux下如果對定時要求不太精確的話,使用alarm()和signal()就行了,但是如果想要實現精度較高的定時功能的話,就要使用setitimer函式。
setitimer()為linux的api,並非c語言的standard library,setitimer()有兩個功能,一是指定一段時間後,才執行某個function,二是每間格一段時間就執行某個function;
linux為每個任務安排了3個內部定時器:
itimer_real:實時定時器,不管程序在何種模式下執行(甚至在程序被掛起時),它總在計數。定時到達,向程序傳送sigalrm訊號。
itimer_virtual:這個不是實時定時器,當程序在使用者模式(即程式執行時)計算程序執行的時間。定時到達後向該程序傳送sigvtalrm訊號。
itimer_prof:程序在使用者模式(即程式執行時)和核心模式(即程序排程用時)均計數。定時到達產生sigprof訊號。itimer_prof記錄的時間比itimer_virtual多了程序排程所花的時間。
定時器在初始化是,被賦予乙個初始值,隨時間遞減,遞減至0後發出訊號,同時恢復初始值。在任務中,我們可以一種或者全部三種定時器,但同一時刻同一型別的定時器只能使用乙個。
setitimer函式原型如下:
1 #include 2
3 int setitimer(int which, const struct itimerval *new_value,
4 struct itimerval *old_value);
5 6 timer values are defined by the following structures:
7 8 struct itimerval ;
12 13 struct timeval ;
it_interval用來指定每隔多長時間執行任務, it_value用來儲存當前時間離執行任務還有多長時間。比如說, 你指定it_interval為2秒(微秒為0),開始的時候我們把it_value的時間也設定為2秒(微秒為0),當過了一秒, it_value就減少乙個為1, 再過1秒,則it_value又減少1,變為0,這個時候發出訊號(告訴使用者時間到了,可以執行任務了),並且系統自動把it_value的時間重置為 it_interval的值,即2秒,再重新計數
下面是setitimer簡單例項:
1 #include 2 #include 3 #include 4 #include 5 #include 6
7 void test_func()
8 13
14 void init_sigaction()
15 24
25 void init_time()
26 36
37 int main(int argc, char **argv)
38
可以看出每個一秒輸出乙個count的值:
下面是執行結果:
[root@localhost 5th]# ./test
count is 0
count is 1
count is 2
count is 3
count is 4
count is 5
count is 6
count is 7
count is 8
count is 9
Java之幾種定時器的使用
沒有去仔細研究這兩種定時器的api,會使用及能在專案中應用即可 import org.quartz.cronexpression import org.quartz.crontrigger import org.quartz.jobdetail import org.quartz.scheduler...
Linux 定時crond使用
因為之前工作中使用的時候沒有做記錄,這裡簡單記下使用。參考1 linux定時執行shell指令碼檔案 參考2 使用shell指令碼或命令列 新增crontab 定時任務 命令介紹 crontab l 定時任務列表 crontab e 編輯定時任務 sbin service crond start 啟...
Linux中Posix定時器函式的使用介紹
int timer create clockid t clockid,struct sigevent sevp,timer t timerid 功能 建立定時器 描述 函式 timer create 會建立乙個timer 每程序 返回的timer id 在呼叫程序中是唯一的,建立後的timer處於停...