看板 LinuxDev 關於我們 聯絡資訊
要在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