我有一个在线程 1 中管理的 TClientDataset。
在另一个线程中,我有一个 TClientDataset 的克隆图像。
我会遇到线程问题吗?
编辑
克隆的图像以只读模式使用。
我有一个在线程 1 中管理的 TClientDataset。
在另一个线程中,我有一个 TClientDataset 的克隆图像。
我会遇到线程问题吗?
编辑
克隆的图像以只读模式使用。
简短的回答是否定的,ClientDataSet 不是线程安全的。更复杂的答案是,这取决于你如何使用它。无论您拥有多少个 ClientDataSet 克隆,只要您只读取数据,它们就可以安全地从多个线程中使用。即使您设置不同的范围、当前记录、过滤器等,也是如此。
而且,尽管您没有问过这个问题,但您可以释放任何克隆的 ClientDataSet,甚至是克隆的原始 ClientDataSet,而不会出现问题。
另一方面,如果需要向任何克隆发布记录或重新加载数据,则必须使用同步对象。如果更改很少,则 TMultiReadExclusiveWriteSynchronizer 类非常适合用于此目的。
一句话:没有。
所有的 VCL 都应该被认为是“线程不安全的”。对 TThread 中可视组件的任何调用都应在 Synchronize 事件中进行。
任何 VCL/RTL 类都应该完全在 TThread 中创建和销毁。
克隆过程应该使用 TCriticalSection 来处理,但是每个 TClientDataSet 在自己的线程中都应该没问题。