函式定義
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...