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