2009-03-21 20 views

Odpowiedz

15

Krótka odpowiedź brzmi: nie, ClientDataSet nie jest bezpieczny dla wątków. Bardziej zaangażowana odpowiedź jest taka, że ​​zależy to od tego, jak z niej korzystasz. Bez względu na to, ile masz klonów ClientDataSet, możesz bezpiecznie korzystać z wielu wątków, o ile tylko czytasz dane. Jest to prawdą, nawet jeśli ustawiasz różne zakresy, bieżące rekordy, filtry i tak dalej.

I, o ile nie zapytałeś o to, możesz bezproblemowo usunąć wszystkie sklonowane pliki ClientDataSets, nawet oryginalny ClientDataSet, który został sklonowany.

Z drugiej strony, jeśli istnieje potrzeba, aby kiedykolwiek opublikować rekord w którymś z klonów lub ponownie załadować dane, należy użyć obiektu synchronizacji. Jeśli zmiany są rzadkie, klasa TMultiReadExclusiveWriteSynchronizer jest świetna do użycia w tym celu.

4

Proces klonowania powinien być obsługiwany za pomocą narzędzia TCriticalSection, ale każdy obiekt TClientDataSet powinien działać poprawnie we własnym wątku.

11

Jednym słowem: Nie

Wszystkie VCL należy uznać za „gwint niebezpieczne”. Wszelkie wywołania do komponentów wizualnych w TThread powinny być wykonywane w zdarzeniu Synchronize.

Każda klasa VCL/RTL powinna zostać utworzona i zniszczona w całości w TThread.

Powiązane problemy