## Tcl8.6.17/Tk8.6.17 Documentation > Tcl C API > Limit

### 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_LimitAddHandler, Tcl_LimitCheck, Tcl_LimitExceeded, Tcl_LimitGetCommands, Tcl_LimitGetGranularity, Tcl_LimitGetTime, Tcl_LimitReady, Tcl_LimitRemoveHandler, Tcl_LimitSetCommands, Tcl_LimitSetGranularity, Tcl_LimitSetTime, Tcl_LimitTypeEnabled, Tcl_LimitTypeExceeded, Tcl_LimitTypeReset, Tcl_LimitTypeSet — 解釈実行機能上の源資制限を制御し確認する manage and check resource limits on interpreters
  SYNOPSIS
    #include <tcl.h>
    int
    Tcl_LimitCheck(interp)
    int
    Tcl_LimitReady(interp)
    int
    Tcl_LimitExceeded(interp)
    int
    Tcl_LimitTypeExceeded(interp, type)
    int
    Tcl_LimitTypeEnabled(interp, type)
    void
    Tcl_LimitTypeSet(interp, type)
    void
    Tcl_LimitTypeReset(interp, type)
    int
    Tcl_LimitGetCommands(interp)
    void
    Tcl_LimitSetCommands(interp, commandLimit)
    void
    Tcl_LimitGetTime(interp, timeLimitPtr)
    void
    Tcl_LimitSetTime(interp, timeLimitPtr)
    int
    Tcl_LimitGetGranularity(interp, type)
    void
    Tcl_LimitSetGranularity(interp, type, granularity)
    void
    Tcl_LimitAddHandler(interp, type, handlerProc, clientData, deleteProc)
    void
    Tcl_LimitRemoveHandler(interp, type, handlerProc, clientData)
  引数 ARGUMENTS
    Tcl_Interp *interp (入力in)
    int type (入力in)
    int commandLimit (入力in)
    Tcl_Time *timeLimitPtr (入出力in/out)
    int granularity (入力in)
    Tcl_LimitHandlerProc *handlerProc (入力in)
    ClientData clientData (入力in)
    Tcl_LimitHandlerDeleteProc *deleteProc (入力in)
  説明 DESCRIPTION
  LIMIT CHECKING API
  LIMIT CONFIGURATION
  LIMIT CALLBACKS
  KEYWORDS

### NAME

Tcl_LimitAddHandler, Tcl_LimitCheck, Tcl_LimitExceeded, Tcl_LimitGetCommands, Tcl_LimitGetGranularity, Tcl_LimitGetTime, Tcl_LimitReady, Tcl_LimitRemoveHandler, Tcl_LimitSetCommands, Tcl_LimitSetGranularity, Tcl_LimitSetTime, Tcl_LimitTypeEnabled, Tcl_LimitTypeExceeded, Tcl_LimitTypeReset, Tcl_LimitTypeSet — 解釈実行機能上の源資制限を制御し確認する manage and check resource limits on interpreters

### SYNOPSIS

#include <tcl.h>
int
Tcl_LimitCheck(interp)
int
Tcl_LimitReady(interp)
int
Tcl_LimitExceeded(interp)
int
Tcl_LimitTypeExceeded(interp, type)
int
Tcl_LimitTypeEnabled(interp, type)
void
Tcl_LimitTypeSet(interp, type)
void
Tcl_LimitTypeReset(interp, type)
int
Tcl_LimitGetCommands(interp)
void
Tcl_LimitSetCommands(interp, commandLimit)
void
Tcl_LimitGetTime(interp, timeLimitPtr)
void
Tcl_LimitSetTime(interp, timeLimitPtr)
int
Tcl_LimitGetGranularity(interp, type)
void
Tcl_LimitSetGranularity(interp, type, granularity)
void
Tcl_LimitAddHandler(interp, type, handlerProc, clientData, deleteProc)
void
Tcl_LimitRemoveHandler(interp, type, handlerProc, clientData)

### 引数 ARGUMENTS

Tcl_Interp *interp (入力in)
  管理されている制限が適用されているか､又は､その制限を確認させている解釈実行機能｡ Interpreter that the limit being managed applies to or that will have its limits checked.

int type (入力in)
  操作が参照すべき制限の型｡これは TCL_LIMIT_COMMANDS か TCL_LIMIT_TIME の何れかでなければならない｡　 The type of limit that the operation refers to. This must be either TCL_LIMIT_COMMANDS or TCL_LIMIT_TIME.

int commandLimit (入力in)
  解釈実行機能の中で実行され得る命令の最大個数(info cmdcount によって報告された通りの)｡　 The maximum number of commands (as reported by info cmdcount) that may be executed in the interpreter.

Tcl_Time *timeLimitPtr (入出力in/out)
  新しい読出しの時間制限(Tcl_LimitSetTime)､又は､現在の書込みの時間制限(Tcl_LimitGetTime)､の何れかを有することになる構造への指示子｡　 A pointer to a structure that will either have the new time limit read from (Tcl_LimitSetTime) or the current time limit written to (Tcl_LimitGetTime).

int granularity (入力in)
  如何に頻繁に特定の制限が実際に確認されるかを示す除数｡最低でも 1 でなければならぬ｡　 　 Divisor that indicates how often a particular limit should really be checked. Must be at least 1.

Tcl_LimitHandlerProc *handlerProc (入力in)
  特定の限界が超えた時に呼ぶべき函数｡もし､その処理の間､handlerProc が外されるか限界が引上げられると､制限された解釈実行機能は､処理機能が帰った後にも処理を続けることを許容されることになる｡多くの処理機能は同じ解釈実行機能制限に取付けられているかもしれない; その実行の順序は定義されていない､又､削除される時は handlerProc と clientData によって識別されねばならない｡　 　　 Function to call when a particular limit is exceeded. If the handlerProc removes or raises the limit during its processing, the limited interpreter will be permitted to continue to process after the handler returns. Many handlers may be attached to the same interpreter limit; their order of execution is not defined, and they must be identified by handlerProc and clientData when they are deleted.

ClientData clientData (入力in)
  任意の指示子-寸法の単語であって､何かの文脈を handlerProc 函数に渡すことに使われる｡　 Arbitrary pointer-sized word used to pass some context to the handlerProc function.

Tcl_LimitHandlerDeleteProc *deleteProc (入力in)
  何時であれ処理機能が削除された時に呼ばれる函数｡clientData 要求が全く削除されない場合 NULL でも好い｡　 Function to call whenever a handler is deleted. May be NULL if the clientData requires no deletion.

### 説明 DESCRIPTION

Tcl's の解釈実行機能の原資限界の下位組織は､記述譜が幾らの計算時間を使えるかの緊密な制御を可能にし､算譜が多数の細片に分けられた場合に､ある部分が他より信頼できる時(譬えば､電網応用譜の中央集中処理装置)には便利である｡ 　　　 Tcl's interpreter resource limit subsystem allows for close control over how much computation time a script may use, and is useful for cases where a program is divided into multiple pieces where some parts are more trusted than others (e.g. web application servers).

全ての解釈実行機能は実行の総経過時間の限界を有するかもしれない､又､解釈実行機能が実行できる命令の数に限界があるかもしれない｡この様な限界の確認は潜在的に高負担である(特に時間限界)ので､それぞれの限界は確認用の粗性度を有する､それはそこで確認が実行され得る(それは命令実行の直前であり､又､実行命令の間の指定されない頻度の時である､それは本体が空の while 繰返しでも起り得る)中核内の位置の数の内部計数についての約数である｡ 　　 Every interpreter may have a limit on the wall-time for execution, and a limit on the number of commands that the interpreter may execute. Since checking of these limits is potentially expensive (especially the time limit), each limit also has a checking granularity, which is a divisor for an internal count of the number of points in the core where a check may be performed (which is immediately before executing a command and at an unspecified frequency between running commands, which can happen in empty-bodied while loops).

最終的な限界設定機能部位は呼戻しの仕組みであり､限界が超過される日時の通知を許容する｡この呼戻しは日誌記録を提供するか､更に永く処理を続ける為の解釈実行機能への更なる原資を提供する｡ 　　　 The final component of the limit engine is a callback scheme which allows for notifications of when a limit has been exceeded. These callbacks can just provide logging, or may allocate more resources to the interpreter to permit it to continue processing longer.

限界が超過された時(そして呼戻しが実行された; 呼戻しの実行順序は指定されていない)､限界設定された解釈実行機能の実行は不都合があがり且つ､その不都合捕縛によってその解釈実行機能の中の catch 命令を妨げていた旗が設定されることにより､停止する｡不都合を処理する為にその解釈実行機能内(典型的には親の解釈実行機能)で実行を開始することはその文脈の責務である｡ 　　　 When a limit is exceeded (and the callbacks have run; the order of execution of the callbacks is unspecified) execution in the limited interpreter is stopped by raising an error and setting a flag that prevents the catch command in that interpreter from trapping that error. It is up to the context that started execution in that interpreter (typically the main interpreter) to handle the error.

### LIMIT CHECKING API

解釈実行機能の為の原資の限界を確認する為に､ Tcl_LimitCheck を呼ぶ､それは限界が超過されない場合(呼戻しの処理後) TCL_OK を返し､限界が超過された場合(その場合､不都合伝言文が解釈実行機能内に置かれる) TCL_ERROR を返す｡ Tcl_LimitReady が非零を返す時だけ函数が呼ばれるので､粗い方針が強要される｡この API は Tcl_AsyncReady と Tcl_AsyncInvoke の使用に似ている様設計されている｡ 　　 To check the resource limits for an interpreter, call Tcl_LimitCheck, which returns TCL_OK if the limit was not exceeded (after processing callbacks) and TCL_ERROR if the limit was exceeded (in which case an error message is also placed in the interpreter result). That function should only be called when Tcl_LimitReady returns non-zero so that granularity policy is enforced. This API is designed to be similar in usage to Tcl_AsyncReady and Tcl_AsyncInvoke.

不都合に関して catch の様に振舞える符号命令を書く時､ Tcl_LimitExceeded が零を返す場合にのみ不都合を捕縛するべきである｡もし非零を返す場合､その解釈実行機能は限界超過状態であり､不都合は呼出し文脈への伝播を許容するべきである｡又､ Tcl_LimitTypeExceeded を使って､限界の特定の型が超過しているか確認する事もできる｡ 　　　 When writing code that may behave like catch in respect of errors, you should only trap an error if Tcl_LimitExceeded returns zero. If it returns non-zero, the interpreter is in a limit-exceeded state and errors should be allowed to propagate to the calling context. You can also check whether a particular type of limit has been exceeded using Tcl_LimitTypeExceeded.

### LIMIT CONFIGURATION

解釈実行機能の上に限界が設定されているか(既に超えているか否かではない)を確認する為に､確認したい限界の型を伴って Tcl_LimitTypeEnabled を呼ぶべきである｡特定の限界を可能にする為に､ Tcl_LimitTypeSet を呼出し､限界を不可能にする為に Tcl_LimitTypeReset を呼ぶべきである｡ 　　　 To check whether a limit has been set (but not whether it has actually been exceeded) on an interpreter, call Tcl_LimitTypeEnabled with the type of limit you want to check. To enable a particular limit call Tcl_LimitTypeSet, and to disable a limit call Tcl_LimitTypeReset.

限界命令の水準は Tcl_LimitSetCommands を使って設定されてもよく､ Tcl_LimitGetCommands を使って取出される｡同様に時間の限界についてはそれぞれ Tcl_LimitSetTime と Tcl_LimitGetTime によるが､その API によって時間限界は timeLimitPtr 引数が指している Tcl_Time 構造と相互に複写される｡ 　　　 The level of a command limit may be set using Tcl_LimitSetCommands, and retrieved using Tcl_LimitGetCommands. Similarly for a time limit with Tcl_LimitSetTime and Tcl_LimitGetTime respectively, but with that API the time limit is copied from and to the Tcl_Time structure that the timeLimitPtr argument points to.

特定の限界についてきめ細かさの確認は Tcl_LimitSetGranularity を使って設定でき､ Tcl_LimitGetGranularity を使って取出せる｡註意すべきはきめ細かさは常に正でなければならない｡ 　　 The checking granularity for a particular limit may be set using Tcl_LimitSetGranularity and retrieved using Tcl_LimitGetGranularity. Note that granularities must always be positive.

#### LIMIT CALLBACKS

限界が超過された時に起動される呼戻し処理子を追加する為に､ Tcl_LimitAddHandler を呼び出す｡ handlerProc 引数は実際に呼出される函数を記述する; それは次の原型を有するべきである: 　　　 To add a handler callback to be invoked when a limit is exceeded, call Tcl_LimitAddHandler. The handlerProc argument describes the function that will actually be called; it should have the following prototype:

    typedef void Tcl_LimitHandlerProc(
            ClientData clientData,
            Tcl_Interp *interp);

処理機能への clientData 引数は､何であれ Tcl_LimitAddHandler への clientData 引数に渡される､又､ interp は限界を超過させた解釈実行機能である｡ 　　　 The clientData argument to the handler will be whatever is passed to the clientData argument to Tcl_LimitAddHandler, and the interp is the interpreter that had its limit exceeded.

Tcl_LimitAddHandler への deleteProc 引数は clientData 値を削除する為に呼出す函数である｡削除行為が必要であれば､それは TCL_STATIC か NULL であるかも知れず､構造の解放に Tcl_Free が必要であれば､ TCL_DYNAMIC である｡それ以外の場合､それは次の原型を伴う函数を参照するべきである: 　　　 The deleteProc argument to Tcl_LimitAddHandler is a function to call to delete the clientData value. It may be TCL_STATIC or NULL if no deletion action is necessary, or TCL_DYNAMIC if all that is necessary is to free the structure with Tcl_Free. Otherwise, it should refer to a function with the following prototype:

    typedef void Tcl_LimitHandlerDeleteProc(
            ClientData clientData);

限界処理機能は Tcl_LimitRemoveHandler を使って削除され得る; 取外された処理機能は type と handlerProc と clientData 引数による厳密合致で初めに見付けたもの(処理機能に Tcl_LimitAddHandler を加えた中から)である｡この函数は常に clientData 上で deleteProc を起動する( deleteProc が NULL か TCL_STATIC でない限り)｡ 　　　　 A limit handler may be deleted using Tcl_LimitRemoveHandler; the handler removed will be the first one found (out of the handlers added with Tcl_LimitAddHandler) with exactly matching type, handlerProc and clientData arguments. This function always invokes the deleteProc on the clientData (unless the deleteProc was NULL or TCL_STATIC).

### KEYWORDS

interpreter, resource, limit, commands, time, callback
Copyright © 2004 Donal K. Fellows