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

### 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_DoWhenIdle, Tcl_CancelIdleCall — 仕掛りの行事がない時手続函数を起動する　 invoke a procedure when there are no pending events
  SYNOPSIS
    #include <tcl.h>
    Tcl_DoWhenIdle(proc, clientData)
    Tcl_CancelIdleCall(proc, clientData)
  引数 ARGUMENTS
    Tcl_IdleProc *proc (入力in)
    ClientData clientData (入力in)
  説明 DESCRIPTION
  瑕疵 BUGS
  SEE ALSO
  KEYWORDS

### NAME

Tcl_DoWhenIdle, Tcl_CancelIdleCall — 仕掛りの行事がない時手続函数を起動する　 invoke a procedure when there are no pending events

### SYNOPSIS

#include <tcl.h>
Tcl_DoWhenIdle(proc, clientData)
Tcl_CancelIdleCall(proc, clientData)

### 引数 ARGUMENTS

Tcl_IdleProc *proc (入力in)
  起動すべき手続函数　 Procedure to invoke.

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

### 説明 DESCRIPTION

Tcl_DoWhenIdle は応用譜が待機状態になるときに起動される proc を手配する｡ Tcl_DoOneEvent が呼ばれた時､処理する為のどのような行事も見付けられない応用譜は待機状態であると看做され､生じる行事を待つ休眠に移行しようとする｡この時点で全ての待機中の Tcl_DoWhenIdle 処理機能が起動される｡この時点で､待機している全ての Tcl_DoWhenIdle 処理子が起動される｡ Tcl_DoWhenIdle へのそれぞれの呼出しについて一回の函数手続き呼出しがある; 函数手続きが呼出された後､その処理機能は自動的に取去られる｡Tcl_DoWhenIdle は行事を急送する為に Tcl_DoWhenIdle を使う算譜の中でのみ使用できる｡ Tcl_DoWhenIdle arranges for proc to be invoked when the application becomes idle. The application is considered to be idle when Tcl_DoOneEvent has been called, could not find any events to handle, and is about to go to sleep waiting for an event to occur. At this point all pending Tcl_DoWhenIdle handlers are invoked. For each call to Tcl_DoWhenIdle there will be a single call to proc; after proc is invoked the handler is automatically removed. Tcl_DoWhenIdle is only usable in programs that use Tcl_DoOneEvent to dispatch events.

proc は型 Tcl_IdleProc に合致する引数と結果を有するべきである: Proc should have arguments and result that match the type Tcl_IdleProc:

    typedef void Tcl_IdleProc(
            ClientData clientData);

proc への clientData 假引数は Tcl_DoWhenIdle に与えられた clientData 引数の複写である｡典型的には､ clientData は proc が行うべき事に関する応用譜固有の情報をる組むデータ構造を指す｡ 　　　 The clientData parameter to proc is a copy of the clientData argument given to Tcl_DoWhenIdle. Typically, clientData points to a data structure containing application-specific information about what proc should do.

Tcl_CancelIdleCall は以前の Tcl_DoWhenIdle への一回或はそれ以上の呼出しを取消す為に使える: もし proc と clientData の為に登録された Tcl_DoWhenIdle 処理機能が存在すると､それを起動することなしに取去られる｡もし proc と clientData を参照している待機リスト上に一つより多くの処理機能が存在する場合､全ての処理機能は取去られる｡もし proc と clientData に合致する処理機能が実在しない場合なにも起らない｡ Tcl_CancelIdleCall may be used to cancel one or more previous calls to Tcl_DoWhenIdle: if there is a Tcl_DoWhenIdle handler registered for proc and clientData, then it is removed without invoking it. If there is more than one handler on the idle list that refers to proc and clientData, all of the handlers are removed. If no existing handlers match proc and clientData then nothing happens.

Tcl_DoWhenIdle は (a) 断片的な仕事をする必要があるが (b) なされるべきことを変更する､或は何か異なることがなされる様要求するする様な､何かが近い将来生じ得る様な､状況で最も便利である｡Tcl_DoWhenIdle は全ての取り掛かった行事が処理される迄実際の仕事が延期されることを許容する｡この時点で､なされるべき正確な仕事が判り､正確に一度だけ行うことができる｡ Tcl_DoWhenIdle is most useful in situations where (a) a piece of work will have to be done but (b) it is possible that something will happen in the near future that will change what has to be done or require something different to be done. Tcl_DoWhenIdle allows the actual work to be deferred until all pending events have been processed. At this point the exact work to be done will presumably be known and it can be done exactly once.

譬えば､ Tcl_DoWhenIdle は文章校正譜に使用され､全ての懸案の命令が処理される迄表示を遅らせる｡この特性なしには､譬えば命令ファイルの処理の如く､ある状況で､過剰な再表示が生じる｡ 　　　 For example, Tcl_DoWhenIdle might be used by an editor to defer display updates until all pending commands have been processed. Without this feature, redundant redisplays might occur in some situations, such as the processing of a command file.

### 瑕疵 BUGS

現在の所､待機呼戻しについて自身を継続的に計画し直すことは安全ではない｡ Tk の特定の特性とは悪しく相互作用し､全ての待機呼戻しを完了する為に待とうとする｡もし､自身を継続的に再計画する為に待機呼戻ししようとするなら､零待機期間による時刻期限処理機能を使うことが好ましい｡ 　　　 At present it is not safe for an idle callback to reschedule itself continuously. This will interact badly with certain features of Tk that attempt to wait for all idle callbacks to complete. If you would like for an idle callback to reschedule itself continuously, it is better to use a timer handler with a zero timeout period.

### SEE ALSO

after, Tcl_CreateFileHandler, Tcl_CreateTimerHandler

### KEYWORDS

callback, defer, idle callback
Copyright © 1990 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.