2023年1月17日
之前看《高階unix程式設計》說有基本定時器與高階定時器之分
好像基本定時器不符合我的要求,那麼就先來個高階的吧。
寫個**看看會有什麼發生:
2023年1月18日
看下timer_create函式
int t1;timer_t tm_id;//timer_t其實是個long型
t1 = timer_create(clock_realtime, null, &tm_id);
cout << "timer_create return "
<< t1 << endl;
cout << "tm_id"
<< tm_id << endl;
int t2;
timer_t tm_id2;//timer_t其實是個long型
t2 = timer_create(clock_realtime, null, &tm_id2);
cout << "timer_create return "
<< t2 << endl;
cout << "tm_id"
<< tm_id2 << endl;
可看到輸出的第乙個time_id是0,第二個是1,其實就是用數字標識timerid啦。
2023年1月21日
今天終於試驗出了個timer的用法:
下面是**:
#includemakefile檔案:#include
#include
using std::cout;
using std::endl;
void alrm_handler(int i)
int main()
# # # # # # # # # # # # # # # # # # # # #
# makefile for pafone, general use
# 2011.01.18
# # # # # # # # # # # # # # # # # # # # #
libs = -lrt
objs = main.o
target = timer
#gcflags :compile flags, gdflags: link flags
gcflags =
gdflags =
gcc = g++
all : $(objs)
$(gcc) -o $(target) $(objs) $(libs)
@echo "compile success"
%.o : %.cpp
$(gcc) $(gcflags) -c $< -o $@
clean :
rm -f $(target) $(objs)
編譯執行後的輸出:
[root@pafone timer]# ./timer
timer_create return 0
tm_id0
timer_create return 0
tm_id1
set the timer 0: 5s
set timer 1: 3s
settime : 1295597124s
timer interrupt 14
settime : 1295597127s
timer interrupt 14
settime : 1295597129s
timer interrupt 14
settime : 1295597130s
timer interrupt 14
settime : 1295597133s
其中有乙個是5s,另乙個是3s的,但alrm_handler(int i) 函式傳入來的i都是14,怎麼區分是哪個定時器呢? man 7 signal 發現裡面的說明有說到handler的傳入引數便是訊號sigalrm的#define值。
那麼用sigacton可不可以區分是哪個定時器呢?還是一定要通過傳送不同的訊號來區分定時器?
注:訊號會中斷一些阻塞呼叫及sleep()函式,例如將while(1)改為sleep()
itmspec.it_interval.tv_sec = 3;itmspec.it_interval.tv_nsec = 0;
itmspec.it_value.tv_sec = 3;
itmspec.it_value.tv_nsec = 0;
timer_settime(tm_id2, null,&itmspec,null);
sleep(100);
輸出是:
[root@pafone timer]# ./timer
timer_create return 0
tm_id0
timer_create return 0
tm_id1
set the timer 0: 5s
set timer 1: 3s
settime : 1295599530s
timer interrupt 14
settime : 1295599533s
[root@pafone timer]#
即它會在第乙個定時訊號後返回,也就是定時訊號中斷了sleep.
如用用sigaction, 其它一些系統呼叫可以設定sa_restart使呼叫繼續,但對sleep不起作用。
間隔定時器itimer
間隔定時器的介面如下 include int getitimer int which,struct itimerval curr value int setitimer int which,const struct itimerval new value,struct itimerval old v...
Linux定時器的使用
使用定時器的目的無非是為了週期性的執行某一任務,或者是到了乙個指定時間去執行某乙個任務。要達到這一目的,一般有兩個常見的比較有效的方法。乙個是用linux內部的三個定時器,另乙個是用sleep,usleep函式讓程序睡眠一段時間,使用alarm定時發出乙個訊號,還有那就是用gettimeofday,...
linux定時器的使用
使用定時器的目的無非是為了週期性的執行某一任務,或者是到了乙個指定時間去執行某乙個任務。要達到這一目的,一般有兩個常見的比較有效的方法。一 個是用linux內部的三個定時器,另乙個是用sleep,usleep函式讓程序睡眠一段時間,其實,還有乙個方法,那就是用gettimeofday,difftim...