如何在Linux下實現定時器

2021-04-07 07:07:01 字數 1709 閱讀 1182

如何在

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>

int

main

(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

);

return

0;

}

如何在Linux下實現定時器

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

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定時器,可是僅僅能精確...