TThread.Synchronize - czy używanie w takiej formie jest bezpieczne ?

TThread.Synchronize - czy używanie w takiej formie jest bezpieczne ?
pahacfd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Hej,

Moje pytanie brzmi czy mogę wykonywać w głównym unicie odwołania TTHread w poniższej formie.
Nie wiem jak ustawić w tym przypadku FreeOnTermiante:= true, czy ten watek sam się zwalania po wykonaniu procedury chodzi by w przyszłości nie było wycieków ?

Kopiuj
   TThread.Synchronize(nil,
                 procedure
                 begin
                    memo1.Lines.Add(S);
                 end);
abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
2

Przecież to metoda statyczna więc co ma się zwalniać?

pahacfd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Dziękuję za Odpowiedź.

Chce się upewnić, czyli śmiało mogę używać takiej formy w głównym unicie bez obaw o pamięć i inne problemy?

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

Klasa wątków jest specyficzna, bo pozwala na automatyczne zwolnienie instancji po zakończeniu pracy wątku. Jednak aby do zwolnienia doszło, najpierw tę instancję trzeba mieć, a w podanym przez ciebie kodzie nie ma stworzenia instancji klasy, więc i nie będzie czego zwalniać.

pahacfd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0
furious programming napisał(a):

Klasa wątków jest specyficzna, bo pozwala na automatyczne zwolnienie instancji po zakończeniu pracy wątku. Jednak aby do zwolnienia doszło, najpierw tę instancję trzeba mieć, a w podanym przez ciebie kodzie nie ma stworzenia instancji klasy, więc i nie będzie czego zwalniać.

Super, bardzo dziękuje furious programming za profesjonalną i szybką odpowiedź. Ja ją zrozumiałem w ten sposób że mogę bezpiecznie używać takiej metody tak? 😇

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

Możesz bezpiecznie używać metody TThread.Synchronize, bo jest to metoda statyczna, nie wymagająca instancjonowania TThread i sprzątania później pamięci. Jeśli masz instancję klasy wątku, bo ją stworzyłeś konstruktorem, to musisz ją zwolnić — albo wywołując destruktor, albo ustawić FreeOnTerminate, aby instancja zwolniła się sama.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.