## Tcl9.0.3/Tk9.0.3 Documentation > Tcl C API > Exit

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Tcl_Exit, Tcl_Finalize, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_ExitThread, Tcl_FinalizeThread, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler, Tcl_SetExitProc — 応用譜又は時分割実行片を終了する(そして､終了操作子を起動する) end the application or thread (and invoke exit handlers)
  SYNOPSIS
    #include <tcl.h>
    Tcl_Exit(status)
    Tcl_Finalize()
    Tcl_CreateExitHandler(proc, clientData)
    Tcl_DeleteExitHandler(proc, clientData)
    Tcl_ExitThread(status)
    Tcl_FinalizeThread()
    Tcl_CreateThreadExitHandler(proc, clientData)
    Tcl_DeleteThreadExitHandler(proc, clientData)
    Tcl_ExitProc *
    Tcl_SetExitProc(proc)
  引数 ARGUMENTS
    int status (入力in)
    Tcl_ExitProc *proc (入力in)
    void *clientData (入力in)
  説明 DESCRIPTION
  SEE ALSO
  KEYWORDS

### NAME

Tcl_Exit, Tcl_Finalize, Tcl_CreateExitHandler, Tcl_DeleteExitHandler, Tcl_ExitThread, Tcl_FinalizeThread, Tcl_CreateThreadExitHandler, Tcl_DeleteThreadExitHandler, Tcl_SetExitProc — 応用譜又は時分割実行片を終了する(そして､終了操作子を起動する) end the application or thread (and invoke exit handlers)

### SYNOPSIS

#include <tcl.h>
Tcl_Exit(status)
Tcl_Finalize()
Tcl_CreateExitHandler(proc, clientData)
Tcl_DeleteExitHandler(proc, clientData)
Tcl_ExitThread(status)
Tcl_FinalizeThread()
Tcl_CreateThreadExitHandler(proc, clientData)
Tcl_DeleteThreadExitHandler(proc, clientData)
Tcl_ExitProc *
Tcl_SetExitProc(proc)

### 引数 ARGUMENTS

int status (入力in)
  応用譜又は時分割実行片が終了した理由についての情報を提供する｡正確な意味はOS依存である｡ 0 は通常､正常終了､零以外のどの値も通常は､不都合が生じたことを意味する｡ Provides information about why the application or thread exited. Exact meaning may be platform-specific. 0 usually means a normal exit, any nonzero value usually means that an error occurred.

Tcl_ExitProc *proc (入力in)
  応用譜の終了を起動する為の手続き関数､又は(Tcl_SetExitProc については) NULL は､現在の応用譜終了手続関数の搭載抹消する｡　 Procedure to invoke before exiting application, or (for Tcl_SetExitProc) NULL to uninstall the current application exit procedure.

void *clientData (入力in)
  手続函数procに渡す任意の一語値 Arbitrary one-word value to pass to proc.

### 説明 DESCRIPTION

此処で説明する手続函数は Tcl 応用譜の実行を終了する優雅な仕組みを提供する｡ 終了処理機能は Tcl 符号命令の実行が終了する前に応用譜の状態を浄化するために起動される｡ 　　　 The procedures described here provide a graceful mechanism to end the execution of a Tcl application. Exit handlers are invoked to cleanup the application's state before ending the execution of Tcl code.

Tcl 応用譜を終了し､且つ､その処理課程から終了するために Tcl_Exit を起動する｡この手続函数は exit Tcl 命令により起動され､応用譜を終らせるために何処ででも起動することが可能である｡ 誰も exit() 系呼出しを直接起動すべきではない; 常に､代りに Tcl_Exit を起動すべきでありそれで終了処理機能を起動できる｡ 註意すべきはもし他の符号命令が直接 exit() 系手続函数を起動した場合､又は逆に Tcl_Exit を呼ぶことなく応用譜を終了させる場合､終了処理機能は実行されない｡ Tcl_Exit は内部的に exit() 系手続函数を起動する､従って制御を呼出し側に返すことはない｡ もし応用譜の終了処理機能が実装された場合( Tcl_SetExitProc を参照されたい)､その処理機能は終了状態を構成する引数と共に起動される(空 * に送る); 応用譜終了処理機能は Tcl に制御を返すべきではない｡ 　 Invoke Tcl_Exit to end a Tcl application and to exit from this process. This procedure is invoked by the exit Tcl command, and can be invoked anyplace else to terminate the application. No-one should ever invoke the exit() system call directly; always invoke Tcl_Exit instead, so that it can invoke exit handlers. Note that if other code invokes exit() system call directly, or otherwise causes the application to terminate without calling Tcl_Exit, the exit handlers will not be run. Tcl_Exit internally invokes the exit() system call, thus it never returns control to its caller. If an application exit handler has been installed (see Tcl_SetExitProc), that handler is invoked with an argument consisting of the exit status (cast to void *); the application exit handler should not return control to Tcl.

Tcl_Finalize は Tcl_Exit に似ているが現在の処理課程からは終了しない｡ Tcl を使っている処理課程が終ったが実行を続けたい時､又 積込みから外されようとしている動的に積込まれた拡張を Tcl が使う時､浄化に便利である｡ Tcl が積込み解除された時､確実に適正に浄化するために須らく命令符号は Tcl_Finalize を起動するべきである｡ Tcl_Finalize は一度以上呼出しても安全である｡ Tcl_Finalize is similar to Tcl_Exit except that it does not exit from the current process. It is useful for cleaning up when a process is finished using Tcl but wishes to continue executing, and when Tcl is used in a dynamically loaded extension that is about to be unloaded. Your code should always invoke Tcl_Finalize when Tcl is being unloaded, to ensure proper cleanup. Tcl_Finalize can be safely called more than once.

Tcl_ExitThread は現在の時分割片を終了する為に使われ､時分割経由の終了処理機能を起動する｡この終了化は Tcl_FinalizeThread によってなされる､それは時分割片経由状態を浄化し時分割終了処理機能を起動したい場合に呼出す事ができる｡ Tcl_Finalize は現在の時分割片の為に自動的に Tcl_FinalizeThread を呼ぶ｡ Tcl_ExitThread is used to terminate the current thread and invoke per-thread exit handlers. This finalization is done by Tcl_FinalizeThread, which you can call if you just want to clean up per-thread state and invoke the thread exit handlers. Tcl_Finalize calls Tcl_FinalizeThread for the current thread automatically.

Tcl_CreateExitHandler は proc の為に Tcl_Finalize と Tcl_Exit によって起動されることを手配する｡ Tcl_CreateThreadExitHandler は proc の為に Tcl_FinalizeThread と Tcl_ExitThreadによって起動されることを手配する｡これは緩衝域の払い出しや大域記憶域の解放の様な浄化操作の為の留め具を提供する｡ proc は型 Tcl_ExitProcに合致すべきである: Tcl_CreateExitHandler arranges for proc to be invoked by Tcl_Finalize and Tcl_Exit. Tcl_CreateThreadExitHandler arranges for proc to be invoked by Tcl_FinalizeThread and Tcl_ExitThread. This provides a hook for cleanup operations such as flushing buffers and freeing global memory. Proc should match the type Tcl_ExitProc:

    typedef void Tcl_ExitProc(
            void *clientData);

proc への clientData 媒介変数は呼戻しが作成された時に Tcl_CreateExitHandler か Tcl_CreateThreadExitHandler に与えられた引数の複写である｡典型的には clientData は proc 内でするべきことに就いての応用譜固有の情報を含むデータ構造を指す｡ 　　　 The clientData parameter to proc is a copy of the clientData argument given to Tcl_CreateExitHandler or Tcl_CreateThreadExitHandler when the callback was created. Typically, clientData points to a data structure containing application-specific information about what to do in proc.

Tcl_DeleteExitHandler と Tcl_DeleteThreadExitHandler は以前に作成された実在の処理機能を削除するために呼ばれる｡それは proc と clientData によって示される処理機能を取去るので proc への呼出しは作られない｡もしそのような処理機能が実在しない場合､ Tcl_DeleteExitHandler や Tcl_DeleteThreadExitHandler は何もしない｡ Tcl_DeleteExitHandler and Tcl_DeleteThreadExitHandler may be called to delete a previously-created exit handler. It removes the handler indicated by proc and clientData so that no call to proc will be made. If no such handler exists then Tcl_DeleteExitHandler or Tcl_DeleteThreadExitHandler does nothing.

Tcl_Finalize と Tcl_Exit は全ての登録された終了処理機能をそれらが登録されたのと逆順に実行する｡これは拡張が積込まれ取外される自然な順に合致する; もし拡張機能 A が拡張機能 B を積込むと､通常自身が取消される前に B を取外す｡もし拡張機能 A がその終了処理機能を拡張機能 B より前に登録すると､どの B に関する終了処理機能も A.に関する終了処理機能よりも前に実行される｡ Tcl_Finalize and Tcl_Exit execute all registered exit handlers, in reverse order from the order in which they were registered. This matches the natural order in which extensions are loaded and unloaded; if extension A loads extension B, it usually unloads B before it itself is unloaded. If extension A registers its exit handlers before loading extension B, this ensures that any exit handlers for B will be executed before the exit handlers for A.

Tcl_Finalize と Tcl_Exit は処理課程水準の終了処理機能の後に Tcl_FinalizeThread と時分割片終了処理機能を呼ぶ｡理由は時分割終了化は入出力通信路系を完全終了するので､入出力の大域終了処理機能によるどのような試みもビットの墓場への投げ込みになる｡ Tcl_Finalize and Tcl_Exit call Tcl_FinalizeThread and the thread exit handlers after the process-wide exit handlers. This is because thread finalization shuts down the I/O channel system, so any attempt at I/O by the global exit handlers will vanish into the bitbucket.

Tcl_SetExitProc は応用譜終了処理操作子を任用して､以前に任用していた応用譜終了処理操作子を返すか､それが任用されてない場合は NULL を返す｡もし､応用譜終了処理操作子が任用されている場合､その終了処理操作子は､適切な時に Tcl_Finalize を経由して Tcl の副系の終了化の完全な責務を引き継ぐ｡ 起動された時に proc に渡された引数は終了状態符号(Tcl_Exit に渡す様に)を *value 空値に渡す｡ Tcl_SetExitProc installs an application exit handler, returning the previously-installed application exit handler or NULL if no application handler was installed. If an application exit handler is installed, that exit handler takes over complete responsibility for finalization of Tcl's subsystems via Tcl_Finalize at an appropriate time. The argument passed to proc when it is invoked will be the exit status code (as passed to Tcl_Exit) cast to a void *value.

Tcl_SetExitProc はstub-可能な拡張では使えない｡ Tcl_SetExitProc can not be used in stub-enabled extensions.

### SEE ALSO

exit

### KEYWORDS

abort, callback, cleanup, dynamic loading, end application, exit, unloading, thread
Copyright © 1995-1996 Sun Microsystems, Inc.