Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ak uz chces program ukoncit tak pouzi procedurku Halt. Je to sice nasilne ukoncenie, ale co uz... mn…
Intex 23.06.2006 16:07
Intex
Ale Halt; si po sebe neuprace. Korektné je len Application.Terminate;. Halt je na použitie vhodný vt…
msx. 24.06.2006 14:06
msx.
To je logické. HALT prostě ustřelí aplikacei a basta fidli, ani programátor nemá šanci uvolnit objek… poslední
Rce 25.06.2006 01:04
Rce

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ě.
Proto Application.Terminate nahodí Application.Terminated := true; aby všechny komponenty (včetně programátora :))) 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).

Zpět do poradny Odpovědět na původní otázku Nahoru