作者gn00618777 (非常念舊)
看板C_and_CPP
標題[問題] 關於 timer signal 編程
時間Sat Mar 11 12:30:24 2017
版友好
我是在安卓上開發,寫原生程式,也就是以C來編寫
我寫了一個小程式,再一個回圈內做一個一秒後會執行 handlerFunc 的 function
後此function 每一秒後就會進來。
handlerFunc {
ALOGD(變數 A) //印出
變數A = 0; //操作變數A
alarm(1);
}
while {
if(isHidOpen == false) {
fd = open(/dev/hidraw0, O_RDWR);
if(fd) {
isHidOpen = true;
signal(SIGALARM, handlerFunc);
}
else
close(fd);
} else {
bytes_read = read(fd,buf,sizeof(buf))
變數A++;
if(bytes_read > 0) { ... }
else {
alarm(0);
close(fd);
}
}
}
運行時,總會隨機當掉,然後就系統重開,網路上查詢,看起來是 signal 會搶資源
造成死鎖產生,但還是不確定,沒有統一說法,有沒有達人,為在下指點一下呢?
感謝回復,我寫完整點補上我缺的 close
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.115.110.197
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1489206628.A.11C.html
1F:→ petercoin: 對底層不熟,但是open之後不用close嗎? 03/12 00:36
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 13:36:01
2F:→ petercoin: if(fd)那邊用完還是沒有關閉? 03/14 13:38
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 17:11:56
3F:→ gn00618777: 我再修改了,只有在讀取失敗時,我才會關閉 03/14 17:13
※ 編輯: gn00618777 (61.220.69.181), 03/14/2017 19:50:21