關於linux下定時器,多定時器
在windows下,我們可以建立多個定時器,而且也可以刪除,沒個定時器有獨立的id號可以區分,但是在linux下一個執行緒只能有一個定時器,這讓我們需要使用多個定時器任務就顯得有點尷尬了。但是也不是沒有辦法。
下面我們來對比windows下的定時器和linux下的定時器任務
MMRESULT timer_handle;定義一個定時器id;
timer_handle = ::timeSetEvent( UINT uDelay,UINT uResolution,
LPTIMECALLBACK lpTimeProc,
WORD dwUser,
UINT fuEvent ) 通過timeSetEvent,來初始化一個定時器,
uDelay:以毫秒指定事件的週期。
Uresolution:以毫秒指定延時的精度,數值越小定時器事件解析度越高。預設值為1ms。
LpTimeProc:指向一個回撥函式。
DwUser:存放使用者提供的回撥資料。
FuEvent:指定定時器事件型別:
TIME_ONESHOT:uDelay毫秒後只產生一次事件
TIME_PERIODIC :每隔uDelay毫秒週期性地產生事件。
::timeKillEvent( timer_handle );通過::timeKillEvent()函式來刪除定時器
使用起來是很方便的。
但是在linux下,有兩種定時器alarm和 struct itimerval timer_handle;如果要比較精確的話建議使用 struct itimerval timer_handle;
struct itimerval timer_handle;建立定時器
timer_handle.it_interval.tv_sec=0;
//設定單位定時器定時時間到秒
timer_handle.it_interval.tv_usec=100000;//到微妙
timer_handle.it_value.tv_sec=0; //設定單位定時器初始值
timer_handle.it_value.tv_usec=100000;//到微妙
setitimer(ITIMER_REAL,&timer_handle,NULL); //初始化單位定時器
signal(SIGALRM,(__sighandler_t)multi_timer_manage); //指定單位定時器定時時間到時執行的multi_timer_manage函式,SIGALRM是訊號型別
下面是刪除定時器:
struct
itimerval value;//這裡定義了一個定時器,其實也就是覆蓋了上一個定時器,設定時間都為0就行了
value.it_value.tv_sec = 0;
value.it_value.tv_usec = 0;
value.it_interval = value.it_value;
setitimer(ITIMER_REAL, &value, NULL);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
linux下的多定時,其實也是定義一個定時器,然後,根據不同時間發出的訊號來處理不同的事件,
struct timers//定義一個結構體
{
int interval; //定時時間,表示多少時間執行一次
void(*handler)(int); //處理函式,所要執行的函式
};
struct timers timer[10];//然後我們定義十個這樣的結構體
int i=0;//定義一個變數來記錄一下
下面是:訊號處理函式
void static multi_timer_manage()
{
for(int s=0;s<i;s++){//根據不同的timers執行不同的函式
timer[s].interval--;
if(timer[s].interval==0)
{
timer[s].interval=s+1;
timer[s].handler(s);
}
}
}
然後,我們在設定
timer[i].interval=i+1;//時間
timer[i++].handler=TimeCbProc;//定時執行的函式這裡可以根據需要,執行不同的函式。
相關文章
- Linux核心定時器Linux定時器
- BIOS相關定時器iOS定時器
- 路由器WiFi定時開關設定教程 路由器WiFi定時開關怎麼設定?路由器WiFi
- 【linux】驅動-15-定時器Linux定時器
- 關於定時器週期、頻率等相關計算定時器
- 定時器以及定時器的幾個案例定時器
- linux下定時任務的簡單示例Linux
- 基於51微控制器的定時器定時器
- Timer(定時器)定時器
- python定時器Python定時器
- JavaScript 定時器JavaScript定時器
- js定時器JS定時器
- JavaScript定時器JavaScript定時器
- iOS定時器iOS定時器
- 純生JS輪播,定時器新增和清除定時器JS定時器
- Qt - QTimer(定時器)QT定時器
- TIM-定時器定時器
- python flask 定時器PythonFlask定時器
- Flink onTimer定時器定時器
- java 中定時器Java定時器
- Qt QTimer定時器QT定時器
- JMeter—定時器(八)JMeter定時器
- Systemd 定時器教程定時器
- Java - Timer定時器Java定時器
- 直播app原始碼,定時開關,實現計時器功能APP原始碼
- Laravel + Workerman 實現多程式定時器任務Laravel定時器
- 雲伺服器Linux系統設定時間同步設定伺服器Linux
- 19. 通用定時器定時器
- workerman定時器問題定時器
- odoo12 定時器Odoo定時器
- (八)定時計數器
- JavaScript6:定時器JavaScript定時器
- 5.9 jmeter元件-定時器JMeter元件定時器
- Java之定時器TimerJava定時器
- GO的定時器Timer 和定時任務cronGo定時器
- 分享一篇關於Python實現環形佇列高效定時器Python佇列定時器
- 關於beego的定時任務Go
- 【JavaScript定時器小案例】常見的幾種定時器實現的案例JavaScript定時器
- 如何在linux使用crontab命令定時重啟伺服器Linux伺服器