關於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定時器
- Linux 定時器alarm()Linux定時器
- linux下多定時器的實現(經典)Linux定時器
- ios 多執行緒定時器iOS執行緒定時器
- 定時器定時器
- 路由器WiFi定時開關設定教程 路由器WiFi定時開關怎麼設定?路由器WiFi
- 定時器以及定時器的幾個案例定時器
- 基於51微控制器的定時器定時器
- iOS定時器iOS定時器
- JavaScript定時器JavaScript定時器
- js定時器JS定時器
- JavaScript 定時器JavaScript定時器
- 核心定時器定時器
- 【linux】驅動-15-定時器Linux定時器
- linux下定時任務 crontab詳解Linux
- 純生JS輪播,定時器新增和清除定時器JS定時器
- java 中定時器Java定時器
- python定時器Python定時器
- Systemd 定時器教程定時器
- JMeter—定時器(八)JMeter定時器
- Go 的定時器Go定時器
- Python 定時器Python定時器
- android定時器Android定時器
- 閉包、定時器定時器
- jmeter(七)定時器JMeter定時器
- 整理:java定時器。Java定時器
- Android 定時器Android定時器
- JavaScript定時器演示JavaScript定時器
- linux下定時任務的簡單示例Linux
- Laravel + Workerman 實現多程式定時器任務Laravel定時器
- 多執行緒-定時器的概述和使用執行緒定時器
- 直播app原始碼,定時開關,實現計時器功能APP原始碼
- linux下使用TCP存活(keepalive)定時器LinuxTCP定時器
- linux下定時執行任務的方法--crontabLinux
- workerman定時器問題定時器
- JavaScript6:定時器JavaScript定時器
- 5.9 jmeter元件-定時器JMeter元件定時器