

Delphi a Application.Terminate v podprograme?
Mam program ktory na zaciatku pomocou funkcie nacitava udaje z textoveho suboru (kde su rozne navestia a podla nich vie o aky typ udajov ide). Pokial navestie v zdrojovom subore nenajde tak zobrazi spravu ze nenasiel dane udaje. Tu nastava problem. Kedze uz nieje mozne dospiet k sparavnym vysledkom vypoctou tak som chcel program ukoncit pomocou Application.Terminate v tejto funkcii. Neviem ale z akeho dovovodu program pokracuje dalej a k ukonceniu dojde az po dokonceni vypoctu (ktory je samozrejme zle kedze nemal vsetky potrebne vstupne udaje). Funkcia sa sklada z casti try, finally a except a v casti finally po CloseFile() som zavolal proceduru Application.Terminate ked neboli najdene pozadovane udaje vo vstupnom subore.
Mohol by mi niekto vysvetlit preco sa program neukonci ale pokracuje dalej? Pripadne ako vyriesit tento problem?
Ak uz chces program ukoncit tak pouzi procedurku Halt. Je to sice nasilne ukoncenie, ale co uz... mne to uz viackrat pomohlo...
Ale Halt; si po sebe neuprace. Korektné je len Application.Terminate;. Halt je na použitie vhodný vtedy, ak je program "načatý" nejakou chybou a nedokáže sa "spamätať" a potrebuješ vrátiť riadenie systému. Napríklad nabúraš pamäť a pokračovanie programu nie je vhodné.
Edit:
Halt performs an abnormal termination of a program and returns to the operating system.
To perform a normal termination of a Delphi application, call the Terminate method on the global Application object. If the application does not use a unit that provides an Application object, call the Exit procedure from the main Program block.
Exitcode is an optional expression that specifies an exit code for the program.
To je logické. HALT prostě ustřelí aplikacei a basta fidli, ani programátor nemá šanci uvolnit objekty. W9x jsou po několika takových pokusech na hubě kvůlivá uškrcení v paměti a na prostředcích. W typu NT to přežijou kapánek víckrát, ale také ne nekonečně.
) věděli, že se to ukončuje a podle toho se zařídili. A proto se to může ukočit až v čase IDLE (když program zahálí a všechny požadavky jsou vyřízeny).
Proto Application.Terminate nahodí Application.Terminated := true; aby všechny komponenty (včetně programátora