小编shi*_*wla的帖子

设计模式,Qt模型/视图和多线程

我正在创建一个显示市场数据的应用程序,并以其他形式使用它.我将市场数据存储在地图中 std::map<tickerId, StockData>.让我举一个关于如何使用这个地图的例子.

  1. 网络在时间t发送封装库存数据的数据包. updatePrice(tickerId, latestPrice)
  2. 更新地图中的库存数据.现在,多个线程可以访问/更新数据.因此必须锁定映射以进行线程安全操作.这是第一个问题,我是否还需要锁定基础数据以进行更新?
  3. 新股票数据有多种用途,比如说IBM有价格更新,那么我需要在我的投资组合中更新IBM的价值.以及在屏幕上显示新数据.并且可以有其他几种同时使用.updatePosition(tickerId, price)updateStockScreen(tickerId, price).此外,从位置更新中分离Gui更新非常重要,因为GUI不是应用程序的主要优势.
  4. 我对如何实现这种类型的设计感到困扰.我在QT中阅读了有关模型/视图设计的信息,但是如果View线程从同一个地图读取,则必须将其锁定.这导致设计缓慢/低效.每次视图从模型中读取时,都需要锁定模型.这是在实时GUI中提供的吗?
  5. 总而言之,我已经将许多不同的对象存储为地图.对象实时更新.我需要更新它们,然后在不同的位置使用它们.如果有人能给我一个关于如何实现这种设计的小例子,那就太好了.

对有用书籍的一些参考也受到赞赏.

我是新人,并试图通过我的小知识实现太多,所以如果我问过愚蠢/形成错误的问题,请原谅我.

谢谢Shiv

c++ model-view-controller qt

12
推荐指数
1
解决办法
6719
查看次数

c ++映射的线程安全性

这是关于线程安全的std::map.现在,同时读取是线程安全的,但写入不是.我的问题是,如果我每次都向地图添加唯一元素,那么它是否是线程安全的?

  1. 所以,举一个例子,如果我有这样的地图std:map<int, std::string> myMap ,我总是添加新的密钥,永远不会修改现有的键值,那么这是线程安全的吗?

  2. 更重要的是,这会给我任何随机的运行时行为吗?

  3. 添加新密钥是否也被视为修改?如果在添加时键总是不同的,那么它不应该是线程安全的,因为它修改了内存的独立部分吗?

谢谢Shiv

c++ thread-safety

9
推荐指数
1
解决办法
9402
查看次数

多线程观察者模式

我有一个问题,每次在不同的主题中更新主题.因此,每当主题被更新时,它相应地用新信息更新观察者.但是,如果观察者列表很长,则需要一些时间来更新所有观察者.想想一个经常更新的主题.当主题正在更新观察者时,"主题"对象被锁定,因此不能由不同的线程更新.这将为主题创建信息流量或导致信息丢失.

您是否知道如何在多线程环境中处理这些问题?另外,有人可以推荐一些关于C++并行编程的书吗?

c++ multithreading observer-pattern

6
推荐指数
1
解决办法
7389
查看次数

在C#中调试大型程序

我有一个用C#编写的大程序,需要大约20分钟才能完成.该计划分为多个阶段,信息流是连续的.如果我的程序在说完第2步后失败了,我必须从头开始重新运行它.在某些内存中对象/服务等的每个步骤之后是否有更智能的方法来保存信息,可以直接用于运行第3步.这不是一个很好的描述,但我需要在最后调试程序,但为此我必须每次从头开始重新运行它.这种情况有没有工业实践?

谢谢Shiv

c# debugging

1
推荐指数
1
解决办法
188
查看次数