10

我有一个在线程 1 中管理的 TClientDataset。

在另一个线程中,我有一个 TClientDataset 的克隆图像。

我会遇到线程问题吗?

编辑

克隆的图像以只读模式使用。

4

3 回答 3

17

简短的回答是否定的,ClientDataSet 不是线程安全的。更复杂的答案是,这取决于你如何使用它。无论您拥有多少个 ClientDataSet 克隆,只要您只读取数据,它们就可以安全地从多个线程中使用。即使您设置不同的范围、当前记录、过滤器等,也是如此。

而且,尽管您没有问过这个问题,但您可以释放任何克隆的 ClientDataSet,甚至是克隆的原始 ClientDataSet,而不会出现问题。

另一方面,如果需要向任何克隆发布记录或重新加载数据,则必须使用同步对象。如果更改很少,则 TMultiReadExclusiveWriteSynchronizer 类非常适合用于此目的。

于 2009-07-10T22:39:12.987 回答
12

一句话:没有。

所有的 VCL 都应该被认为是“线程不安全的”。对 TThread 中可视组件的任何调用都应在 Synchronize 事件中进行。

任何 VCL/RTL 类都应该完全在 TThread 中创建和销毁。

于 2009-03-21T15:52:24.627 回答
5

克隆过程应该使用 TCriticalSection 来处理,但是每个 TClientDataSet 在自己的线程中都应该没问题。

于 2009-03-21T13:52:44.977 回答