POSIX定時器使用方法

2021-10-06 15:52:32 字數 3495 閱讀 2882

函式定義

int

timer_create

(clockid_t clock_id,

struct sigevent *evp, timer_t *timerid)

;/* 建立定時器 */

inttimer_settime

(timer_t timerid,

int flags,

const

struct itimerspec *new_value,

struct itimerspec *old_value)

;/* 初始化定時器 */

inttimer_gettime

(timer_t timerid,

struct itimerspec *value)

;/* 獲得乙個活動定時器的剩餘時間 */

inttimer_delete

(timer_t timerid)

;/* 刪除定時器 */

引數介紹

clockid_t clock_id有如下幾種選擇。

clock_realtime /* systemwide realtime clock. 乙個可設定的系統範圍內的實時時鐘,計算從2023年1月1日午夜0點起的毫秒數 */

clock_monotonic /* represents monotonic time. cannot be set. 乙個不可設定的單調增加時鐘,它測度系統啟動後某個非特定時間點起的時間 */

clock_process_cputime_id /* high resolution per-process timer. 這個時鐘測量呼叫程序(包含其中所有執行緒)所消耗的 (使用者和系統) cpu 時間 */

clock_thread_cputime_id /* thread-specific timer. 這個時鐘測量呼叫執行緒所消耗的 (使用者和系統) cpu 時間*/

clock_realtime_hr /* high resolution version of clock_realtime. */

clock_monotonic_hr /* high resolution version of clock_monotonic. */

引數struct sigevent *evp定義計時器到期時,呼叫者應如何被通知這個事件。

sigev_none /* 當計時器到期不進行非同步通知 */

sigev_signal /* 到計時器到期時,在程序中產生訊號量 sigev_signo */

sigev_thread /* 到計時器到期時,呼叫 sigev_notify_function 好像它是乙個新執行緒的啟動函式 */

sigev_thread_id /* 類似 sigev_signal,但訊號量signal 針對由 sigev_notify_thread_id 指定的執行緒,這個執行緒必須和呼叫執行緒在同乙個程序中 */

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

timer_t g_timer =

null

;#define timeout_default_value 1 * 60

/* 1分鐘 */

static

inttimer_setup()

;static

inttimer_destroy()

;static

inttimer_run

(unsigned

int timeout)

;/* 格式化時間字串格式為:www mmm dd hh:mm:ss yyyy */

void

ctime_get_time

(char

*string)

static

void

timeout_handler()

/* 建立定時器 */

static

inttimer_setup()

memset

(&evp,0,

sizeof

(evp));

evp.sigev_value.sival_ptr =

&timer;

evp.sigev_notify = sigev_signal;

evp.sigev_signo = sigusr2;

retval =

timer_create

(clock_realtime,

&evp,

&timer);if

(retval !=0)

g_timer = timer;

ctime_get_time

("timer_setup");

return0;

}/* 銷毀定時器 */

static

inttimer_destroy()

return retval;

}/* 啟動定時器 */

static

inttimer_run

(unsigned

int seconds)

ts.it_value.tv_sec = seconds;

/* 倒計時的時間 */

ts.it_value.tv_nsec =0;

ts.it_interval.tv_sec =0;

ts.it_interval.tv_nsec =0;

retval =

timer_settime

(g_timer,0,

&ts,

null);

if(retval !=0)

return0;

}static

void

*thread_time

(void

*data)

intmain

(int argc,

char

const

*ar**)

**邏輯

建立乙個執行緒thread_time來建立和設定定時器,設定一分鐘,到期呼叫timeout_handler

執行結果

thread_time enter

timer_setup --sat may 30 16:39:25 2020

timeout_handler --sat may 30 16:40:25 2020

建立定時器後與系統時間就沒有關係了,假如設定16:39:25開始計時後,修改系統時間到16:40:25,並不會觸發定時器結束,一定是等到定時的一分鐘到達後,才會觸發定時器結束。

Windows Timer定時器使用方法

定時器在vc中的使用頻繁,以下討論定義器的使用方法。定時器的原型是 winuserapi uint winapi settimer hwnd hwnd uint nidevent,uint uelapse,timerproc lptimerfunc hwnd 是欲設定定時器的窗體控制代碼。定時時間到...

定時器使用

dword winapi checksendinfovector lpvoid lpparameter return 0 void callback dotimer hwnd hwnd,uint umsg,uint ptr idevent,dword dwtime timerproc的引數hwnd是...

stm32F103定時器使用方法

3 程式源 4 總結 stm32中一共有11個定時器,其中2個高階控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的systick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。其中tim1和tim8是能夠產生3對p...