我正在创建一个应用程序,它显示市场数据并在其他一些形式中使用它。我在地图中存储市场数据,说 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