回答
你或許應該指定要測量什麼,因爲至少有2種可能的解釋(原線程是「忙」裏pthread_create
隨時間與調用pthread_create
直到另一個線程實際執行的第一條指令的時間)。
在這兩種情況下,你可以使用clock_gettime
與CLOCK_MONOTONIC
前後調用pthread_create
或呼叫之前和線程功能可按內部後的第一件事查詢單調的實時性。然後,從第一個減去第二個值。
要知道在phtread_create
裏面花了些什麼時間,CLOCK_THREAD_CPUTIME_ID
是一種替代方法,因爲這隻能計算您的線程使用的實際時間。
總而言之,測量這種事情有點沒有意義。它告訴你幾乎沒有任何問題關於它將如何在您的系統或其他系統的實際情況下運行,具有未知進程以及未知的調度策略和優先級。
在另一臺機器上,或在另一天,您的線程可能只是在100或200毫秒後安排。如果你依靠這種事情不會發生,那麼你就死定了。
編輯:
關於上述評論添加的信息,如果你需要的規模是內「通常調度量程」以及「執行非定期的行動」,你可以創建一個線程和nanosleep
15或30毫秒。當然,睡眠不是非常準確或可靠,所以你可能想要阻止timerfd
(如果可移植性不是最高優先級,則使用信號傳遞計時器)。
使用單個定時器/等待計劃不規則間隔也不是什麼大問題,您只需要跟蹤事件到期的時間。這就是現代操作系統也是這樣做的(閱讀「定時器合併」)。
..並且在許多應用程序中,只是N/A,因爲這是啓動時的一次性成本。 –
@MartinJames:對於使用(非內核)aio,getaddrinfo_a或libunbound或類似應用程序(所有這些應用程序在不可預知的時間產生線程)的應用程序,它只是非常有趣(如果有的話)。然後,無論如何,你無能爲力...... – Damon
- 1. 如何測量創建對話框所需的時間?
- 2. 線程創建和同步所需的時間
- 3. 多線程程序的測量時間
- 4. 測量多線程的執行時間
- 5. 多線程完成時間測量
- 6. Windows XP上的線程創建時間
- 7. 在多線程環境中測量線程的執行時間
- 8. 線程測試的時間
- 9. 測量java短時間運行的線程執行時間
- 10. 創建特定時間線程
- 11. Java線程標識創建時間
- 12. 完成多線程程序所需的時間?
- 13. 創建以線性時間
- 14. 測量線程之間的計算時間 - java
- 15. 測量將參數傳遞給函數所需的時間
- 16. 如何測量執行方法所需的時間?
- 17. 在Python中測量多線程代碼的進程時間
- 18. 測量在應用程序/線程中花費的時間
- 19. 創建測量之間的延遲
- 20. 如何測量在數據庫中創建新記錄所用的時間
- 21. 計算使用線程池所需的總時間
- 22. 如何創建一個線程在3秒的時間間隔
- 23. JMeter:每個線程之間的延遲時間創建
- 24. 何時創建線程池?
- 25. 運行時線程創建
- 26. BSoD創建線程時
- 27. Linux上的Java:使用System.nanotime()測量線程的流逝時間
- 28. 在C++多線程程序中測量已用時間
- 29. 關於多線程系統中信息收集和時間測量的建議
- 30. 完成進程所需的時間
你想通過這個實現什麼?希望你沒有嘗試一些優化,因爲你無法想象這樣的優化。 –
我需要在非常規基礎上執行一些操作 - 在30 ms後調用函數X,在15 ms後調用函數Y,在60 ms後調用Z.這個函數應該在隊列中發送消息。 – rimas