set_terminate (CRT)
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 )( );
注意
set_terminate 関数はデバッガー内では使用できません。
動的にリンクされるすべての DLL や EXE に対して、set_terminate ハンドラーは 1 つだけです。そのため、set_terminate を呼び出しても、ハンドラーが別のハンドラーに置き換えられたり、別の DLL または EXE で設定されたハンドラーを置き換えたりする場合があります。
この関数は /clr:pure ではサポートされません。
必要条件
ルーチン |
必須ヘッダー |
---|---|
set_terminate |
<eh.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
「terminate」の例を参照してください。
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。