Delphi trik 3: ForceQueue

vložil Radek Červinka 30. prosince 2019 21:53

Už dříve jsem psal o TThread.Queue, ale možná jsem nezdůraznil, že v případě volání z hlavního vlákna je takový kód proveden okamžitě, tj. bez volání synchronize, což třeba nejen u Android aplikací může být požadováno.

Pro takový případ je k dispozici TThread.ForceQueue který zaručí, že i v případě volání z hlavního vlákna je takový kód prováděn se synchronizací.

Zkuste si novou aplikaci a na tlačítko Button1.OnClick dejte


procedure TForm6.Button1Click(Sender: TObject);
begin
  TThread.ForceQueue(nil,
     procedure
     begin
       Button1.Caption := 'hello'; // break point 1
       //Button1.Repaint;
     end
    );
end;// break point 2

A nyní program otestujte. Měl by se nejdříve zastavit na break point 2 a pak až na break point 1. Pokud ForceQueue nahradíte za Queue, tak se pořadí zastavení prohodí.

Tagy:

trik

Komentáře

31.12.2019 10:52:41 #

raul

Zdar,
proc Android vyzaduje spusteni kodu ze Synchronize, kdyz je kod pousten z hlavniho vlakna ?

raul

31.12.2019 13:23:11 #

radekc

To jsem nenapsal, ale takto z jakéhokoliv vlákna je zaručeno, že kod bude synchronizovan, a jelikož delší akce je nutno dělat jako vlákna (resp. bez hlavního vlákna), tak je o starost méně, pokud  se do toho bude plést něco z hlavního vlákna.  

radekc

31.12.2019 13:30:43 #

raul

Aha. Pak je trochu nestastna formulace : je takový kód proveden okamžitě, tj. bez volání synchronize, což třeba nejen u Android aplikací může být požadováno.

raul

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců