Tipy a triky v Delphi, díl 110. - práce ve volném čase

Dneska naučíme naší aplikaci něco dělat, i když zrovna nic nedělá. Připadá vám to zmatené? Čtěte dál a hned se vyjasní.
Oč se tedy bude dnes jednat? Naše spuštěná aplikace není zrovna vždy dostatečně vytížena. Dalo by se říct, že většinu času čeká na nějaký vstup ze strany uživatele a nedělá nic. Dostává se do stavu idle, tedy mimo aktivitu. Naopak jsou zase chvíle, kdy aplikace "jede" na maximum a pak zase od ní nemůžeme očekávat nějakou jinou činnost. Právě v době, kdy aplikace nedělá "nic" můžeme tohoto času využít a uložit jí některé "méně náročné" a ne tak důležité úkoly. Co to může být konkrétně, to již nechám na vás. My si jen dnes ukážeme, jak detekovat stav, kdy se aplikace dostane do klidu, a jak jí říci, co má v tu dobu dělat.

Vše má na starosti událost OnIdle, která je vyvolána právě v okamžiku, kdy se aplikace dostane do klidu. Kdy to přesně nastane, to záleží již na systému. Tato událost ale nepatří k formuláři (TForm), ale přímo k nadřazenému objektu TApplication, ke kterému nemáme přístup přes Object Inspectora. Nejprve v události OnCreate hlavního formuláře přesměrujeme událost OnIdle na provádění našeho kódu. Ten poté specifikujeme v samostatné proceduře. Bude se jednat pouze o vizuální reprezentaci stavu nečinnosti, který bude v tomto případě znázorněn pomocí komponenty ProgressBar. V době nečinnosti aplikace se bude ProgressBar postupně zvětšovat od nuly do maxima a tak stále dokola. Umístěte tedy na formulář ProgressBar.

Pro simulaci nějaké činnosti aplikace si přidáme na formulář tlačítko a do události OnClick umístíme jednoduchý repeat cyklus, který bude po 10 sekund simulovat zatížení aplikace.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyIdleHandler(Sender: TObject; var done: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyIdleHandler(Sender: TObject; var done: Boolean);
begin
  if ProgressBar1.Position <100 then ProgressBar1.Position := ProgressBar1.Position + 1
                                else ProgressBar1.Position := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := MyIdleHandler;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  dt, dtn: TDateTime;
begin
  dt := Now;
  repeat
    dtn := Now;
  until dtn > (dt + 10 / 3600 / 24);
end;

end.

Pochopitelně je rozumné, umístit do Idle části pouze takový kód, který nebude příliš náročný a nebude aplikaci moc zatěžovat, protože pak by to jaksi nemělo moc smysl. Jinak se pochopitelně fantazii meze nekladou.

Diskuze (9) Další článek: Jak se UPC Mistral změní na chello

Témata článku: Software, Windows, Programování, Maxim, Spuštěná aplikace, Práce, Čas, Trik, Maximum, Maxima, Díl


Určitě si přečtěte

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 54

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 60


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji