2011-04-04 95 views
0

我正在設計一個應用程序來收集我的車輛數據並將其顯示在應用程序中。我試圖弄清楚我的軟件最好的組合是什麼。我計劃使用QT爲我的GUI(QPainter),並且我有定製硬件來收集傳感器的數據。我認爲硬件I/O將駐留在將圖形呈現在其自己的線程中的應用程序中,但現在我認爲將所有硬件I/O通信放在單獨的進程中並在兩者之間進行通信可能會更好與某些IPC協議進程(不知道哪一個)。實時顯示數據

你們推薦我做什麼?這也是我第一次編寫一個多進程應用程序。

+0

[Real realtime](http://en.wikipedia.org/wiki/Real-time_computing),還是快速/互動足以讓人們不會在乎/注意? – genpfault 2011-04-04 17:39:38

+0

我希望它足夠快,我想要注意數據中的任何滯後。嘗試用此應用程序替換我的項目車的儀表組。 – Talguy 2011-04-04 17:44:20

+0

這幾乎從來都不是錯誤。炸燬昂貴火箭的最佳途徑。 – 2011-04-04 17:58:20

回答

0

我已經寫過這樣的東西數百次了。到目前爲止,最好的解決方案是將專用硬件分成兩個線程或任務:

  • 其中一個做任何需要實時操作
  • 另一這是爲了響應數據的查詢,並從UI
命令

這兩個線程彼此協作以維護一致的,信號量保護的共享變量空間。第二個線程在鎖定共享空間之前完成它的所有解析和任務,製作任何需要的副本並解鎖。目標是將鎖定間隔限制在儘可能短的時間內。通常情況下,將所有共享變量安排到一個單一結構中是可行的,並且使用批量memcpy(),即使只有少數成員感興趣。這種交互越簡單越好。

的UI包含

  • 屏幕這,可見和活動的時候,會導致週期性的查詢數據模塊

其它架構是可能的,但每當我看到他們時,他們已經下放變成大量的補丁來解決同步和時間問題。

+0

會將它變成線程(Gui和硬件單獨的線程)或將它們拆分成獨立的進程會更好。有沒有比這個或其他的優勢。就像在進程崩潰時一樣,另一個可以重新開始備份。 – Talguy 2011-04-04 17:46:22

+0

取決於平臺。例如,使用Microsoft Windows,由於其在進程間通信方面的弱點,我會在單個進程中使用線程。使用Linux,無論採用哪種方式 - 無論哪種方式對你來說都更爲自然。 – wallyk 2011-04-04 17:51:40

+0

好吧,我打算使用Minimal Ubuntu作爲我的操作系統輕量級。希望這將有助於提高應用程序的實時性。 – Talguy 2011-04-04 17:54:59