在linux系統下實現定時器
在linux實現乙個定時器,不像win32下那樣直觀。在win32呼叫settimer就行了,在linux下則沒有相應函式可以直接呼叫。定時器作為乙個常用的功能,在linux當然也有相應實現。下面我們看看幾種常用的方法。
要實現定時器功能,最土的辦法實現莫過於用sleep/usleep來實現了。當然,它會阻塞當前執行緒,除了處理定時功能外,什麼活也幹不了。當然要解決這個問題不難,建立乙個單獨的執行緒來負責定時器,其它執行緒負責正常的任務就行了。
要實現定時器功能,最簡單的辦法就是alarm訊號。這種方法簡單,也相應的缺陷:用訊號實現效率較低; 最小精度為1秒,無法實現高精度的定義器。簡單示例:
引用:
#include#include
static void timer(int sig)
return;
}int main(int argc, char* argv)
(setitimer和alarm有類似的功能,也是通過訊號來實現)
最優雅的方法是使用rtc機制。利用select函式,你可以用單執行緒實現定時器,同時還可以處理其它任務。簡單示例:
引用:
#include#include
#include
#include
#include
#include
#include
#include
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定時器 是指在每隔一段時間後就會進行一次相關操作,具有計時性的。核心操作是如下方法 int setitimer int which,const struct itimerval restrict value,struct itimerval restrict ovalue 函式返回的是va...
linux核心定時器的實現
由於linux還不是乙個實時的作業系統,因此如果需要更高精度,或者更精確的定時的話,可能就需要打一些實時的補丁,或者用商用版的實時linux,這裡內的定時器最小間隔也就是1個tick.這裡還有乙個要注意的,我這裡的分析並沒有分析核心新的hrt 定時器.這個定時器是monta vista加入到核心的乙...
網路程式定時器
伺服器需要處理定時事件,比如定期檢測乙個客戶連線的活動狀態。伺服器程式通常管理著眾多的定時事件,因此有效地組織這些定時事件,使之能在預期的事件點被觸發且不影響伺服器的主要邏輯,對於伺服器的效能有著至關重要的影響。為此,我們要將每個定時事件分別封裝稱為定時器,並實現某種容器類資料結構,比如鍊錶 排序鍊...