I new using TClientDataSet and would like some help.
My application fetch heavy stream data from an external web-socket like API (from multiple channels), proccess it asap in worker threads and then show to the user when requested... nowdays I do it manually with lists, arrays and iterate to populate the components (manually).
I want to improve and standartize the data in the application memory, the approach I thought is to go with TClientDataSet. The problem is that the application works with a heavy multithread system (which works pretty well, its not the problem), and I know that the TClientDataSet is not thread-safe, and could have alot of problems to deal with, so I would like to ask who already faced this problem before, if I on the right way.
My approach:
• The worker threads (which will receive the data to proccess) will write in a own TClientDataSet, only the worker thread may write data in its dataset;
• Operations (insert/update/delete) in worker thread TClientDataSet wouldn't be synchronized;
• Operations and cloning will be protected by a sync object (TCriticalSection like);
• The UI that must shown data may clone the worker thread TClientDataSet to have a read-only copy, which can be linked in VCL controls (like TDBGrid) and also iterated, filtered, etc.
Anyone that experienced this scenario (or similar) can say if I on the right way to avoid thread synchronization and deadlock problems dealing with TClientDataSet in a multi-thread system?