作者bluestar8783 (藍星)
看板LinuxDev
標題[問題] timer start/stop?
時間Thu Mar 24 10:53:20 2011
要在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
推 antontw:好像用 alarm 這個 function 來做的人比較多? 03/24 14:50
→ antontw:alarm - set an alarm clock for delivery of a signal 03/24 14:51
推 askacis:1.把t的各成員設為0再setitimer一次就可以停止了 03/24 15:54
→ askacis:2.signal handler傳進來的的就是對應的信號值,以你的為例 03/24 15:56
→ askacis:就是SIGALRM這個信號~~ 03/24 15:56
→ askacis:另外,原po有跑過你貼的code嗎? 03/24 15:57
→ bluestar8783:這個範例是從網路上別人的說明上貼過來的,尚未跑過 03/24 21:27
→ bluestar8783:ask大大,這個code有問題嗎? 03/24 21:28
→ bluestar8783:因為要設定ms的timer,而alarm是second的,所以... 03/24 21:29