I am creating an application which displays the market data and uses it in some other forms too. I store market data in a map say
std::map<tickerId, StockData>
. Let me give one used case of how this map can be used.
updatePrice(tickerId, latestPrice)
updatePosition(tickerId, price)
and updateStockScreen(tickerId, price)
. Also, separting Gui updates from position update is important as GUI is not the main strength of the application.Some references to useful books are appreciated too.
I am new and trying to achieve too much with my little knowledge so forgive me if I have asked stupid/ill-formed questions.
Thanks Shiv
It sounds conceptually like you want the model on one thread and the view on another, which I looked into at one point.
If so...and your model is read-only through the view widget then yes, you have to lock. I'd argue that doing so undermines the elegance of the "decoupling" provided by the model/view separation. But it could be made to work.
However...if your model is read-write through the view it's not possible to do correctly at all because of the queued nature of the notification slots. Here's an archive of a mailing list conversation I had on the qt-interest mailing list on the topic:
http://blog.hostilefork.com/qt-model-view-different-threads/
"The short version is that I don't think it's feasible for a Model to
be modified on a non-GUI thread...regardless of whether the model's
data has been protected with read/write locks. If what I'm gathering
is correct, then Qt should probably have an assert that a model and
its view have the same thread affinity (it doesn't seem to do that now)"
A subsequent unit test by a KDE developer verified this.
I feel the best way to work around this is to keep the model and the view on the same thread, and only modify the model in the GUI thread. So if the worker thread wishes to change it then it should use a signal.
Whether the worker needs to keep their own copy of the data from which the model was created (or if it needs to get notifications to keep that up to date when the user changes the model through the view) depends on your app. If I understand you correctly, it sounds like like you could probably get away with just ferrying the updates through signal/slots and forgetting them on the worker...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With