我正在創建一個應用程序,它顯示市場數據並在其他一些形式中使用它。我在地圖中存儲市場數據,說 std::map<tickerId, StockData>
。讓我舉一個這個地圖可以如何使用的例子。設計模式,Qt模型/視圖和多線程
- 網絡在時間t發送封裝股票數據的數據包。
updatePrice(tickerId, latestPrice)
- 更新地圖中的股票數據。現在,多個線程可以訪問/更新數據。所以爲了線程安全的操作,地圖必須被鎖定。這是第一個問題,我是否需要鎖定基礎數據以獲取更新?
- 新股票數據有多種用途,例如IBM有價格更新,那麼我需要更新我的投資組合中IBM的價值。以及在屏幕上顯示新數據。並且可以有其他幾個同時使用。
updatePosition(tickerId, price)
和updateStockScreen(tickerId, price)
。此外,從位置更新中分離Gui更新很重要,因爲GUI不是應用程序的主要優點。 - 我只是對如何實現這種類型的設計感到困擾。我閱讀了QT中的Model/View Design來顯示數據,但如果View線程從相同的地圖讀取,它必須被鎖定。這導致設計緩慢/低效。每次從模型讀取視圖時,都需要鎖定模型。這是在實時GUI中提供的嗎?
- 總之,我已經將很多不同的對象存儲爲地圖。對象實時更新。我需要更新它們,然後在各個位置使用它們。如果有人能夠給我一個關於如何實現這種設計的小例子,那將是非常好的。
有用的書的一些參考也讚賞。
我是新的,並試圖用我的小知識實現太多,所以如果我問過愚蠢/格式不清的問題,請原諒我。
感謝 希夫
我剛剛在這裏回答了一個類似的問題到這一個:http://stackoverflow.com/questions/9476045/can-two-threads-read-from-the-same-qlist-at-同時/ 9476153#9476153,雖然你的問題寫得好得多,所以謝謝你!同意@HostileFork,我覺得使用信號是溝通數據的最佳方式。我想知道,你可以在一個線程中運行什麼樣的視圖?這是一種非貴族觀點嗎? – jdi 2012-02-28 21:04:27