vložil Radek Červinka
24. května 2024 14:34
Jen taková krátká poznámka ze života.
Dělal jsem úkol, kde se spouštělo velké množství tasků, které nezávisejí na pořadí. Prostě jak přijde nový požadavek, tak se převezme a podle případu se vygeneruje x výstupů. Krásná úloha pro TTask a TThreadPool. Fungovalo to nádherně, jen si zákazník přál, aby si mohl regulovat kolik dostane program vláken.
Více...
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í.
2598552f-6b4d-4c65-a3d7-43cb704a6412|9|5.0
Tagy: paralel
trik
vložil Radek Červinka
4. července 2015 01:26
V rámci prověřování jednoho nápadu jsem chtěl vyzkoušel jak se chová TThread.Queue a TThread.Synchronize (více o těchto volání z dřívějška) u ne GUI aplikací (resp. zkoušel jsem jen konzolové).
Více...
vložil Radek Červinka
19. dubna 2015 23:59
No minule jsem byl k THTTPClient trošku nespravedlivý, ve skutečnosti toho umí více než se zdálo. Kromě https bez nutnosti dodání OpenSSL pro různé platformy to má zajímavé možnosti ohledně paralelního zpracování. Ukáži na malém příkladu.
Ukáži nejprve příklad na zamyšlení a pak vysvětlím co to vlastně dělá.
Více...
vložil Radek Červinka
10. prosince 2014 22:32
Už dříve jsem psal o možnosti volání synchronize přes anonymní metodu z threadu (tj. synchronní možnost), ale teď Malcolm Groves v článku Updating the UI from a Task publikoval i asynchronní možnost takže má další pěkný příspěvek, který jsem sprostě okopíroval (zároveň i doplnění mé odpovědi Geby).
Více...
vložil Radek Červinka
5. prosince 2014 00:59
Narazil jsem na pěkné vysvětlení IFuture s pěkným příkladem od Malcolma Grovese. Zásadní informace je, že IFuture není hodnota, kterou budete počítat v budoucnu, ale hodnota, kterou budete v budoucnu potřebovat. Tato jemná nuance je zásadní.
Krása použití paralelního programování v XE7 vynikne, až člověk změní myšlení. Přiznám se, že mi to trvá.
Více...
vložil Radek Červinka
10. září 2014 00:39
XE7 přichází s novou jednotkou přímo v RTL a to System.Threading, která zjednodušuje paralelní programování. Jedná se o multiplatformní věc a mezi jinými umí ThreadPool, který podle zátěže přidává nebo odebírá další vlákna.
Více...