Delphi - Processzort terhelő folyamat leállítása az ESC gombbal

forráskód letöltése
Ha van egy olyan műveletünk alkalmazásunkban, mely időben hosszadalmas és nagymértékben lefoglalja a processzort, akkor gondot okozhat e folyamatnak a felhasználó általi leállítása. Ha például futtatunk egy ciklust, mely végez valamilyen műveletet, akkor a felhasználó még az alkalmazásunkat sem tudja bezárni. Ilyen esetben fontos, hogy valamilyen módon a felhasználó megszakíthassa ezt a folyamatot, hogy alkalmazásunk felett visszanyerje az uralmat. Mellékelt példában egy végtelenített while ciklust szakítunk meg az ESC gomb lenyomásakor.
Ehhez pedig annyit kell tennünk, hogy a cikluson belül meghívjuk az Application osztály ProcessMessages eljárását annak érdekében, hogy az alkalmazásunkhoz beérkező üzenetek feldolgozásra kerüljenek.
Ezt követően a GetKeyState függvény hívásával ellenőrizzük, hogy az ESC gomb lenyomott állapotban van-e. Ha igen, akkor ez esetben a break-kel megszakíthatjuk a while ciklust.
procedure TForm1.Button1Click(Sender: TObject);
begin
  while true do begin
    Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+1);
    Application.ProcessMessages;
    if GetKeyState(VK_Escape) and 128=128 then begin
      break;
    end;
  end;
end;
Amíg a ciklus fut addig próbáljuk bezárni az alkalmazást. Látni fogjuk, hogy programunk nem reagál erre a kérésre.