Jak to jest z tym Synchronize() ??

0

Mam sobie wątek, w którym uruchamiam jakąś tam procedurę, której wykonanie trwa dość długo w ten sposób :

procedure TWatek.Execute;
begin
    FreeOnTerminate := true;
    Synchronize(Procedura);
end;

No i teraz niezależnie od priorytetu wątku cała aplikacja wiesza sie na czas wykonywania wątku, tak, jakby to wszystko było robione w ogóle bez użycia wątku. Jak zrobić, żeby to wyglądało jak wątek, czyli nie wieszało aplikacji na czas wykonywania?

LUB ZAMIENNIE

W powyższej procedurze są dodawane itemy do ListView, za pomocą OwnerDraw. Jeśli nie użyję Synchronize, to podczas dodawania w niezidentyfikowanym miejscu pojawia się błąd Index out of bound. Może ktoś miał już taki problem i udało mu się coś wywalczyć? Jeśli tak, to niech się podzieli doświadczeniami.

0

synchronize uzywasz do tego aby odwolac sie do kompnentow visuanych .

czyli ta procedura powinna miec w sobie odwlanie do jakiegos obiektu np paska postepu .

0

Synchronize synchronizuje twój wątek z wątkiem VCL'a, więc nie dziw ze sie wiesza.
Uzywasz moze BeginUpdate i EndUpdate?
Może wklej kawałek kodu.

0

Synchronize() używaj tylko do tych wątków, do których masz pewność, że ma dostęp więcej niż 1 wątek naraz. Jeśli w tym czasie inny wątek nie używa tego ListView, to można bez synchronizacji (synchronizacja polega na odwołaniu procedury w kontekście wątku głownego, a więc wrzuca jakby procedurę w wątek głowny... żeby nie było jednoczesnego manipulowania VCL`em przez wiele wątków).. Daj BeginUpdate, EndUpdate jak Szymek powiedział.. albo lepiej pokaż kod..

0

Dzięki panowie, faktycznie trzeba było zastosować BeginUpdate i EndUpdate. Całe szczęście, bo jakbym miał wklejać kod, to bym się chyba za****ł, bo tam jest tyle tego, w jednej procedurze druga, w trzeciej piętnasta, już sam czasem nie wiem co do czego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1