Share via


set_terminate (CRT)

更新 : 2007 年 11 月

terminate によって呼び出される独自の終了ルーチンを設定します。

terminate_function set_terminate(
   terminate_function termFunction
);

パラメータ

  • termFunction
    独自の終了関数へのポインタ。

戻り値

set_terminate 関数の前回の呼び出しで登録された関数へのポインタを返します。これにより、以前の終了関数を後で復元できます。関数が登録されていない場合は、その戻り値 (NULL でも可) を使って既定の動作を復元できます。

解説

set_terminate 関数は、terminate で呼び出された関数として termFunction をインストールします。set_terminate は、C++ の例外処理で使用されます。また、例外がスローされる前にプログラムの任意の時点で呼び出すことができます。terminate は、既定で abort を呼び出します。この既定の動作を変更するには、独自の終了関数を作成し、その関数名を引数として set_terminate 関数を呼び出します。terminate は、直前の set_terminate の呼び出しで引数として指定された関数を呼び出します。必要なクリーンアップ処理が完了したら、termFunction がプログラムを終了する必要があります。これによってプログラムを終了しないと (呼び出し元に制御を戻すと)、abort 関数が呼び出されます。

マルチスレッド環境では、終了関数はスレッドごとに個別に管理されます。新しいスレッドでは、それぞれ独自の終了関数を設定する必要があります。つまり、終了処理はスレッドごとに行われます。

terminate_function 型は、void を返す termFunction というユーザー定義の終了関数へのポインタとして EH.H で定義されます。独自の終了関数 termFunction は引数を受け取りません。また、呼び出し側に戻ることもできません。その場合は、abort 関数が呼び出されます。例外を termFunction の内部からスローすることはできません。

typedef void ( *terminate_function )( );
t6fk7h29.alert_note(ja-jp,VS.90).gifメモ :

set_terminate 関数はデバッガ内では使用できません。

動的にリンクされるすべての DLL や EXE に対して、set_terminate ハンドラは 1 つだけです。そのため、set_terminate を呼び出しても、ハンドラが別のハンドラに置き換えられたり、別の DLL または EXE で設定されたハンドラを置き換えたりする場合があります。

この関数は /clr:pure ではサポートされません。

必要条件

ルーチン

必須ヘッダー

set_terminate

<eh.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

terminate」の例を参照してください。

.NET Framework の相当するアイテム

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

例外処理ルーチン

abort

_get_terminate

set_unexpected (CRT)

terminate (CRT)

unexpected (CRT)