6

これは他のトピックでも議論されたことを知っています。私が求めているのは、まさにこの質問のタイトルです。

try/finally が最終的に実行されない場合はありますか?

 try
  //some error here
 finally
  //code that MUST be executed
 end;

try..except/finally ブロックをどのように使用する必要があるかについて話しているのではなく、これが発生する可能性があるかどうかを尋ねているだけです。

LE: Application.Terminate/コンピュータのプラグを抜くことは特別なケースです。

4

4 に答える 4

22

try..finally保護されたブロックで例外が発生しても、finally ブロックのコードが実行されることを保証します。これはもちろん、finally ブロックが実行される前にプロセスが強制終了された場合には適用されませんTerminateProcess。また、保護されたブロック内の無限ループによって、finally ブロックの実行が妨げられる場合もあります。

于 2011-08-25T14:15:55.197 に答える
4

電源が失われた場合 (たとえば、コンピューターのプラグを抜き、バッテリーがなく、UPS に接続されていない場合)、finallyブロックが実行されない可能性が非常に高くなります。OS またはドライバーの重大な不具合 (BSOD など) が原因である可能性もあります。ただし、try..finally構造体の全体的な考え方は、finallyブロック内で例外 (あらゆる種類の) が発生した場合でもブロックが実行されるということtryです。ブロック内にステートメントfinallyがある場合でも、ブロックは実行されます。exittry

于 2011-08-25T14:11:03.950 に答える
3

アプリでDEP(データ実行防止)例外が発生した場合、ウィンドウで続行できないと思います。finallyセクションを実行せずに、プロセスが破壊されます。あなたのプロセスはただ「消える」だけです。ただし、これはコンパイラーが実行したことまたは実行しなかったこととは関係ありません。

于 2011-08-25T14:42:15.963 に答える
1

try/finally に入ると、実行が try/finally を離れる前に、finally ブロックが実行されます。

于 2011-08-25T16:32:52.200 に答える