kiedy synchronize jest wymagane

0

mam wątek, który po 'obsłużeniu' pliku, dodaje go do TListBox'a na formie. z poziomu głównego wątku, dostęp do tego komponentu jest surowy - czyli można go tylko i wyłącznie przeglądać przesuwając scrollbox'a. moje pytanie jest takie, czy w takim przypadku użycie funcji synchronize z wnętrza wątku nie jest całkowicie zbędne ?

0

Synchronize jest wymagane, gdy chcesz wątkiem pobocznym wpłynąć na wątek główy. Pamiętaj, że całe komunikaty systemowe, a więc obsługa GUI również jest wykonywana w wątku głównym.

Może się zdarzyć sytuacja, że system będzie chciał odmalować formę (wątek główny), a ty będziesz wtedy chciał dodawać komponent (z dużą szansą masz Access Violation).

Przyjmuj za dobrą prakytkę zawsze używać Synchronize(..); obsługując w jakikolwiek sposób interfejs użytkownika.

0

a moze mi ktos po krotce opisac jak sie ma synchronize do aplikacji konsolowych?
mialem przypadki ze przez synchornize program w ogole nie chicał działać a bez synchronizacji wszystko smiga ale czy moj program nie jest narazony na Acess V..?
aha w mojej app nie ma nic z VCL, troche socketow i generalnie winapi

0
wieprz napisał(a)

a moze mi ktos po krotce opisac jak sie ma synchronize do aplikacji konsolowych?
mialem przypadki ze przez synchornize program w ogole nie chicał działać a bez synchronizacji wszystko smiga ale czy moj program nie jest narazony na Acess V..?
aha w mojej app nie ma nic z VCL, troche socketow i generalnie winapi

winapi jest thread-safe, czyli nie musisz się bawić w synchronizowanie dostępu do obiektów/kontrolek, musisz jedynie zabezpieczyć swój kod tak, aby żadne dwa wątki nie modyfikowały jednocześnie tych samych zmiennych (lub żeby nie było analogicznej sytuacji, kiedy jeden wątek zmienia wartość zmiennej, a drugi akurat w tym samym czasie ją sprawdza). możesz tego dokonać przez sekcje krytyczne (initializecriticalsection + pokrewne), muteksy (createmutex/waitforsingleobject itp) lub semafory (createsemaphore/waitforsingleobject) itp itd.
Przy okazji - synchronize w porównaniu do sekcji krytycznych jest cokolwiek niewygodne.

0
ŁF napisał(a)

Przy okazji - synchronize w porównaniu do sekcji krytycznych jest cokolwiek niewygodne.

Przede wszystkim głupie ono jest, bo w końcu nie po to się tworzy osobny wątek, by część jego zadań wykonywał wątek główny. A na tym polega synchronize. Jednak VCL jest napisane jak jest napisane, i jak się chce z niego korzystać, to trzeba synchronize'ować.

0

dzieki za wskazówki poczytam sobie o tym

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