我需要能夠使用C/C++在Linux上以不同的時間間隔調用某些函數。什麼是最好的方法來做到這一點?例如,我想在100hz調用(),在10h調用b(),在1hz調用c()。在某些時間間隔的Linux函數調用
回答
您可以重複使用settimer來安排接近最後期限的下一個函數調用。
我意識到,無論如何要在程序開始時設置以不同的間隔調用某些函數? – user1620479
間隔是偶數比率...因此每10個100hz的呼叫是10hz,每100個是1個hz。只要系統能夠以期望的分辨率可靠地提供定時器,一個定時器就足夠了。 –
您可以使用Posix計時器,即timer_create(2)和timer_settime(2)。然後,您要使用sigaction(2)設置信號處理程序。請注意,信號處理函數只允許調用一組非常有限的函數(僅限異步信號安全函數,但不包括fprintf
或malloc
!),請參閱,並考慮簡單地在信號中設置volatile sigatomic_t
變量處理程序(並在外部進行適當測試)。
你可能會改爲有一些事件循環(例如libev,或者自己製作一個像poll(2)等多路複用系統調用等等)。如果您正在編寫一個圖形化應用程序(使用例如Qt或Gtk),那麼您已經有了一個事件循環,所以使用它(並且您還提供了圖形工具包或事件循環函數提供的定時器)。
您可能還想看看timerfd_create(2)和朋友(並在您的事件循環或poll(2)
調用中使用該描述符)。
閱讀Advanced Linux Programming應該有所幫助。
PS。使用舊內核和舊機器可能難以獲得可靠的100Hz(或略高)的定時器頻率。您可能需要CONFIG_HIGH_RES_TIMERS=y
和CONFIG_TIMERFD=y
和CONFIG_HPET_TIMER=y
和CONFIG_HZ_1000=y
位於您最近的內核的.config
。
- 1. 在一定的時間後無限調用某些函數
- 2. linux C++如何在特定的時間間隔後調用函數
- 3. 函數調用與requestAnimationFrame之間的時間間隔變化
- 4. 在指定的時間間隔後第一次調用函數
- 5. 想要在ASP.net中的時間間隔後調用函數
- 6. 節點js在不同的時間間隔調用函數
- 7. 在定期時間間隔內調用函數的API
- 8. 在特定的時間間隔後調用javascript函數
- 9. 在很短的時間間隔內多次調用函數
- 10. 如何以固定的時間間隔調用函數?
- 11. 以不同的時間間隔調用javascript函數
- 12. 阿賈克斯的時間間隔調用PHP函數
- 13. android:在某些特定時間間隔內報警remian停止
- 14. 如何在android中關閉應用程序時使用某些時間間隔?
- 15. PHP js函數的時間間隔
- 16. 時間表()函數的Linux
- 17. 在某些時間或時間淡化
- 18. 間隔後調用android中的函數?
- 19. 顯示某些單詞經過一定的時間間隔後
- 20. 在每個特定時間間隔後調度r函數
- 21. 某些標籤之間的每個字母的調用函數
- 22. 計算時間在某些狀態的時間序列數據
- 23. 在某個固定的時間間隔內檢索數據
- 24. 調用某個函數在時間不起作用
- 25. 創建一個時間間隔,該時間間隔將導致函數在JavaScript中的隨機時間運行
- 26. 如何以3秒的時間間隔檢查函數的調用次數?
- 27. 使用時間間隔在Javascript中調用輔助函數功能
- 28. android:在某些時間做某事
- 29. (Java Swing)以時間間隔調用函數並顯示下一次調用標籤的時間
- 30. 如何在一段時間後重復調用某個函數
你有沒有困擾谷歌「計時器在Linux上」? – StoryTeller
一些舊的Linux內核可能無法可靠地調用100Hz的函數。 –