スレッド関数での例外処理
スレッド関数の作成 への移動
Execute メソッドでは、スレッドで発生する例外をすべて捕捉する必要があります。スレッド関数で例外を捕捉できない場合、アプリケーションでアクセス違反が発生するおそれがあります。その例外は IDE で捕捉されるので、アプリケーションの開発時には、このことがはっきりとはわからない場合があります。しかし、アプリケーションをデバッガの外部で実行すると、例外によって実行時エラーが発生し、アプリケーションが動作しなくなります。
スレッド関数の内部で発生した例外を捕捉するには、次のように、Execute メソッドの実装に try...except ブロックを追加します。
procedure TMyThread.Execute;
begin
try
while not Terminated do
PerformSomeTask;
except
{ do something with exceptions }
end;
end;
void __fastcall TMyThread::Execute() {
try {
while (!Terminated)
PerformSomeTask();
}
catch (...) {
// do something with exceptions
}
}