Linux表層程式實現定時器

2021-06-16 14:22:19 字數 1211 閱讀 6207

在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加入到核心的乙...

網路程式定時器

伺服器需要處理定時事件,比如定期檢測乙個客戶連線的活動狀態。伺服器程式通常管理著眾多的定時事件,因此有效地組織這些定時事件,使之能在預期的事件點被觸發且不影響伺服器的主要邏輯,對於伺服器的效能有著至關重要的影響。為此,我們要將每個定時事件分別封裝稱為定時器,並實現某種容器類資料結構,比如鍊錶 排序鍊...