如何在Linux下實現定時器

2021-08-22 03:55:39 字數 1425 閱讀 4034

如何在linux下實現定時器

在linux實現乙個定時器,不像win32下那樣直觀。在win32呼叫settimer就行了,在linux下則沒有相應函式可以直接呼叫。定時器作為乙個常用的功能,在linux當然也有相應實現。下面我們看看幾種常用的方法。

要實現定時器功能,最土的辦法實現莫過於用sleep/usleep來實現了。當然,它會阻塞當前執行緒,除了處理定時功能外,什麼活也幹不了。當然要解決這個問題不難,建立乙個單獨的執行緒來負責定時器,其它執行緒負責正常的任務就行了。

要實現定時器功能,最簡單的辦法就是alarm訊號。這種方法簡單,也相應的缺陷:用訊號實現效率較低; 最小精度為1秒,無法實現高精度的定義器。簡單示例:

#include

<

stdio

.h>

#include

static

void

timer

(int

sig)

return;}

intmain

(int

argc

, char

* argv

)(setitimer和

alarm

有類似的功能,也是通過訊號來實現)

最優雅的方法是使用rtc機制。利用select函式,你可以用單執行緒實現定時器,同時還可以處理其它任務。簡單示例:

#include

<

stdio

.h>

#include

#include

#include

time

.h>

#include

#include

#include

#include

<

errno

.h>

intmain

(int

argc

, char

* argv

)/*set the freq as 4hz*/

if(ioctl(

fd, rtc_irqp_set, 4) < 0)

/*set the freq as 4hz*/

if(ioctl(

fd, rtc_irqp_set, 4) < 0)

/* enable periodic interrupts */

if(ioctl(

fd, rtc_pie_on, 0) < 0)

for(

i= 0;

i< 100;

i++)

printf

("timer/n");}

/* disable periodic interrupts */

ioctl(

fd, rtc_pie_off, 0);

close(fd

);return0;}

如何在Linux下實現定時器

如何在 linux 下實現定時器 在 linux 實現乙個定時器,不像 win32 下那樣直觀。在 win32 呼叫settimer 就行了,在 linux 下則沒有相應函式可以直接呼叫。定時器作為乙個常用的功能,在 linux 當然也有相應實現。下面我們看看幾種常用的方法。要實現定時器功能,最土的...

Linux下的定時器

linux下的定時器有兩種,以下分別介紹 1 alarm 如果不要求很精確的話,用 alarm 和 signal 就夠了 unsigned int alarm unsigned int seconds 專門為sigalrm訊號而設,在指定的時間seconds秒後,將向程序本身傳送sigalrm訊號,...

Linux下的定時器

1.alarm 執行後,程序將繼續執行。在後期 alarm以後 的執行過程中將會在seconds秒後收到訊號sigalrm並執行其處理函式。include include include void sigalrm fn int sig int main void 2.alarm定時器,可是僅僅能精確...