我需要一個函數(例如信號處理程序)在C/C++ linux中每n毫秒激活一次。如何設置信號等......以毫秒分辨率註冊計時器事件。用戶空間中的Linux C/C++定時器信號處理程序
準確度不是超級重要的,但需要在100毫秒左右。
我是新來的linux,我真的不知道從哪裏開始。
我需要一個函數(例如信號處理程序)在C/C++ linux中每n毫秒激活一次。如何設置信號等......以毫秒分辨率註冊計時器事件。用戶空間中的Linux C/C++定時器信號處理程序
準確度不是超級重要的,但需要在100毫秒左右。
我是新來的linux,我真的不知道從哪裏開始。
setitimer(2)
是一個很好的開始,但是你真的想與信號異步嗎?否則,您可以使用select(2)
或poll(2)
的主循環以及適當的超時。
與setitimer
(POSIX 2008標記爲OBS
olete)相比,更安全的替代方案是使用POSIX計時器,並使計時器到期函數在線程中運行,而不是在信號處理程序中運行。這樣您不僅僅限於使用異步信號安全功能。他們要在這裏記載:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_08_05
如果你不喜歡的POSIX API計時器,您可以改爲創建一個線程,僅僅睡在一個循環,並阻止在所有的線程定時信號,除了螺紋。然後,您可以自由地在信號處理程序中使用您喜歡的任何函數,因爲它將在單獨的線程中運行,並且不存在中斷異步信號不安全函數的危險。
需要異步 – user623879 2011-03-25 19:41:19
工程與setitimer很好,thx – user623879 2011-03-25 20:18:53
小心你在信號處理程序中做什麼。我的信號被傳遞,就像它是一箇中斷一樣,並且可能在任何時候發生。你必須非常小心重新進入。請參見http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_21.html – 2011-03-25 20:33:45