linux幾種定時函式的使用

2021-08-22 11:33:44 字數 2402 閱讀 3471

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處於停...