[問題] timer start/stop?

看板LinuxDev作者 (藍星)時間14年前 (2011/03/24 10:53), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
要在process中啟動/停止一個每10ms會執行的timer 現在使用setitimer/signal來做此動作(底下有個範例,有錯誤請糾正) 但是我有幾個問題想請問 1. 啟動timer後,該怎麼暫停?或是刪除?(可否用底下範例說明) 2. handler函式所帶的參數(int a),是要怎麼傳進去呢? 還是說用global變數來傳遞? 感謝! void my_alarm_handler(int a) { cerr<<"test"<<endl; } int main() { struct itimerval t; t.it_interval.tv_usec = 10000; t.it_interval.tv_sec = 0; t.it_value.tv_usec = 0; t.it_value.tv_sec = 0; if( setitimer(ITIMER_REAL, &t, NULL) < 0 ) { cerr<< "setitimer error."<<endl; return -1; } signal(SIGALRM, my_alarm_handler); while(1) { sleep(1); } return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.165.83

03/24 14:50, , 1F
好像用 alarm 這個 function 來做的人比較多?
03/24 14:50, 1F

03/24 14:51, , 2F
alarm - set an alarm clock for delivery of a signal
03/24 14:51, 2F

03/24 15:54, , 3F
1.把t的各成員設為0再setitimer一次就可以停止了
03/24 15:54, 3F

03/24 15:56, , 4F
2.signal handler傳進來的的就是對應的信號值,以你的為例
03/24 15:56, 4F

03/24 15:56, , 5F
就是SIGALRM這個信號~~
03/24 15:56, 5F

03/24 15:57, , 6F
另外,原po有跑過你貼的code嗎?
03/24 15:57, 6F

03/24 21:27, , 7F
這個範例是從網路上別人的說明上貼過來的,尚未跑過
03/24 21:27, 7F

03/24 21:28, , 8F
ask大大,這個code有問題嗎?
03/24 21:28, 8F

03/24 21:29, , 9F
因為要設定ms的timer,而alarm是second的,所以...
03/24 21:29, 9F
文章代碼(AID): #1DYh8Yhm (LinuxDev)
文章代碼(AID): #1DYh8Yhm (LinuxDev)