2013-03-24 40 views
2

我對Real Time編程/多線程相當陌生,我試圖在我的帶子下得到一些實際的開發。我試圖爲一個學校項目編寫一個程序(用C語言編寫),用於執行幾項任務,包括圖像處理(openCV),提供網頁(使用libmicrohttpd之類的庫)以及與外設接口。這個程序將大量使用線程,每個任務基本上都是獨立運行的。爲自己的線程提供實時時鐘是個好主意嗎?

該程序的一個非常重要的部分是事件/數據記錄,並在外設上設置時鐘,這需要計算機的板載時間。也就是說,不止一個線程需要將當前時間作爲其任務的一部分。所以我的問題是,在單個線程中聲明一個全局時間結構並調用gettime是一個更好的主意,或者需要一個單獨的線程始終保持當前時間,然後每個線程都從中讀取?前者聽起來像可能有訪問問題,而第二個聽起來很難以適當的頻率更新。

爲了讓任務更詳細的想法,我做:

  • 我保存圖像,幷包含時間文本日誌,每當OpenCV的檢測到某個對象
  • 我m記錄從外設接收到的最後10個數據包的時間(這是一個非常低的數據速率連接)
  • 外設沒有板載RTC,因此該程序會在連接或漂移太遠時設置它。

感謝您的任何建議。

回答

3

你最好的選擇是使用線程安全的時間獲取器。 gettimeofday就是這樣一個功能(參見這裏:Is the gettimeofday function thread safe in Linux?)。自unix時代開始,它會爲您提供秒和微秒,因此應該很容易準確記錄。只要你不使用任何具有內部緩衝區的功能,你對你獲得的數據的處理是由你自己決定的。

你也應該小心你如何編寫你的日誌。最安全的方法是爲每個線程使用單獨的文件,但也可以使用互斥鎖。

0

你說你的設備沒有RTC。所以我期望它是一個小型嵌入式平臺?如果是這樣,幾乎總是有一些硬件計時器可用。如果是這樣,您可以使用中斷或使用輪詢輪詢計時器值。不要忘記記錄時間調整,以便稍後進行評估。

相關問題