waz*_*123 22 delphi try-finally
最后会阻止执行吗?如果我通过退出; ?
procedure someProc;
begin
Try
Exit;
finally
do_something;
end;
end;
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 26
finally子句将始终执行,除非执行线程进入非终止循环,无限期地阻塞或异常终止,同时执行try子句.
相关文件陈述(强调我的):
try ... finally语句的语法是
Run Code Online (Sandbox Code Playgroud)try statementList1 finally statementList2 end
其中每个statementList是由分号分隔的语句序列.
try ... finally语句执行statementList1(try子句)中的语句.如果statementList1在没有引发异常的情况下完成,则执行statementList2(finally子句).如果在执行statementList1期间引发异常,则控制转移到statementList2; 一旦statementList2完成执行,就会重新引发异常.如果对Exit,Break或Continue过程的调用导致控件离开statementList1,则会自动执行statementList2. 因此,无论try子句如何终止,都始终执行finally子句.
Ken*_*ite 12
一个快速测试应用程序可以很快回答这个问题.
program TestFinally;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
try
WriteLn('Before exiting');
Exit;
finally
WriteLine('In finally. If you see this, it was written after "Exit" was called');
ReadLn;
end;
end.
Run Code Online (Sandbox Code Playgroud)
为了完整起见 - 如果执行try..finally块的进程或线程终止于TerminateProcess/TerminateThread,则finally块将不会执行.
例如,finally块将不会在下面的代码中执行.
o := TObject.Create;
try
TerminateThread(GetCurrentThread, 0);
finally
o.Free;
end;
Run Code Online (Sandbox Code Playgroud)