Autor Téma: Update formulare z vlakna  (Přečteno 3340 krát)

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 468
  • Karma: 15
    • Verze Delphi: FPC :D
Update formulare z vlakna
« kdy: 26-03-2018, 00:33:28 »
Zdar a silu,
mam aplikacku, ktera neustale komunikuje s externimi zarizenim (klido 10) v separatnich vlaknech. Na formulari jsou ruzne prvky pro ovladani tehto zarizenich a zarizeni posilaji docela casto jejich update. Stojim tedy pred otazkou, jestli radeji data prijmout a zavolat nejaky vetsi synchronize, ktery udela hafo podminek a aktualizuje jen zmenena data, ci to udelat tak, ze poslu zmenu dane komponenty - tzn synchronize by byly podstatne mensi, ale v o hodne vetsim mnozstvi. Co je tedy lepsi pristup ? (S gui nemam zase tak velke zkusenosti, vzdy jsem psal spise ty jaderne veci nize :) )

Dikes
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux, (občas Delphi)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Update formulare z vlakna
« Odpověď #1 kdy: 26-03-2018, 09:16:24 »
Zdar a silu,
mam aplikacku, ktera neustale komunikuje s externimi zarizenim (klido 10) v separatnich vlaknech. Na formulari jsou ruzne prvky pro ovladani tehto zarizenich a zarizeni posilaji docela casto jejich update. Stojim tedy pred otazkou, jestli radeji data prijmout a zavolat nejaky vetsi synchronize, ktery udela hafo podminek a aktualizuje jen zmenena data, ci to udelat tak, ze poslu zmenu dane komponenty - tzn synchronize by byly podstatne mensi, ale v o hodne vetsim mnozstvi. Co je tedy lepsi pristup ? (S gui nemam zase tak velke zkusenosti, vzdy jsem psal spise ty jaderne veci nize :) )
Zalezi na tom, jestli dokazes odhadnout "traffic". Jestli bude prilis velky, tak nema smysl updatovat UI pri kazde zmene, ale chce to updatovat nejaky ViewModel a jednou za cas (200 ms?) udelat refresh UI.  Coz je prace navic, takze jestli to funguje i v Lazarovi, tak pri mensim trafficu misto Synchronize pouzit Queue, kdy thread postne pozadavek a narozdil od Synchronize neceka a pokracuje v cinnosti.
« Poslední změna: 26-03-2018, 09:18:01 od pf1957 »

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Update formulare z vlakna
« Odpověď #2 kdy: 26-03-2018, 12:07:03 »
Na čisté ukázání výsledků z threadu je nejlepší Application.QueueAsyncCall. A se sběrem dat do nějaké větší skupiny bych si hlavu nelámal. Ta Queue se zpracovává při Idle, t.j. když má GUI zrovna čas, takže si to udělej tak, aby to bylo pro tebe co nejsrozumitelnější a nejpohodlnější.
Embarcadero Technology Partner