4D v16.3

CALL WORKER

ホーム

 
4D v16.3
CALL WORKER

CALL WORKER 


 

CALL WORKER ( process ; method {; param}{; param2 ; ... ; paramN} ) 
引数   説明
process  テキスト, 倍長整数 in プロセス番号、またはプロセス名
method  テキスト in Name of project method to call
param  in メソッドに渡す引数

説明   

CALL WORKER コマンドは、process に受け渡した名称または ID のワーカープロセスを作成、または呼び出して、任意の param パラメーターを使った method の実行を要求します。

CALL WORKER コマンドは params をカプセル化し、メッセージの形でワーカーが持つメッセージボックスに受け渡します。ワーカープロセスについての詳細はワーカーについてを参照ください。

process パラメーターに指定するプロセス名またはプロセス番号により、ワーカーは特定されます:

  • プロセス番号で指定したプロセスが存在しない場合、またはそのプロセスが CALL WORKER によって 4Dが作成したものでない場合 (例えばメインのアプリケーションプロセスなど)、CALL WORKER は何もしません。
  • プロセス名で指定したプロセスが存在しない場合には、新規のワーカープロセスが作成されます。

注: ユーザーインターフェースを表示するためにデータベースがアプリケーションモードで起動されたときに作成されるメイン・プロセスは、CALL WORKER によってコールすることのできるワーカープロセスです。ただし、メイン・プロセスのプロセス名は 4D の言語環境により異なるため、CALL WORKER を使用する場合にはプロセス番号 (常に 1) で指定することが推奨されます。

注:

  • ワーカープロセス名は大文字と小文字を区別します。
  • ユーザーインターフェースを表示するためにデータベースがアプリケーションモードで起動されたときに作成されるメイン・プロセスは、CALL WORKER によってコールすることのできるワーカープロセスです。ただし、メイン・プロセスのプロセス名は 4D の言語環境により異なるため、CALL WORKER を使用する場合にはプロセス番号 (常に 1) で指定することが推奨されます。

ワーカープロセスはランタイムエクスプローラーのプロセスリストに表示されます。また、PROCESS PROPERTIES コマンドはワーカープロセスも対象に実行できます。

method には、ワーカープロセスのコンテキストで実行するプロジェクトメソッド名を受け渡します。method には空の文字列を渡すこともでき、その場合ワーカーは、自身のプロセス開始時に指定されていた初期メソッドがあれば、それを実行します。

注: メイン・プロセス (プロセス番号 1) は初期プロセスを持たないため、method に空の文字列を受け渡して CALL WORKER をコールすることはできません。そのため、CALL WORKER (1;"") は何もしません。

param パラメーターに値を受け渡すことで、一つ以上の引数を method に受け渡すことができます。引数の渡し方は、サブルーチンを使う場合と同じです (メソッドに引数を渡す 参照)。プロセスのコンテキストで実行を開始する際に、プロセスメソッドはこれらの引数を $1, $2, などの値として受け取ります。配列はメソッドのパラメーターに渡せないことに留意してください。また、CALL WORKER コマンドを使うにあたっては、次のことに留意してください: 

  • テーブルやフィールドへのポインターが使えます
  • ローカル変数やプロセス変数を筆頭とした、変数へのポインターの利用は、プロセスメソッドによってアクセスした時点で未定義の可能性があるため、推奨されません。
  • ワーカーが CALL WORKER の呼び出し元とは別のプロセスの場合に、オブジェクト型の引数を受け渡すと、4D は呼び出し先プロセスにそのオブジェクトのコピーを作成します。

ワーカープロセスは、アプリケーションが終了するか、あるいは KILL WORKER をコールされるまで存続します。必要ないワーカーにはこのコマンドを使い、メモリを解放するのがよいでしょう。

例題  

フォーム上に、選択年の統計などの算出をおこなうボタンを設置します。
ボタンはワーカープロセスを作成、あるいは呼び出します。演算はワーカーがおこなうため、ユーザーはフォームの操作を続行できます。

ボタンのメソッドは次のとおりです:

  // ワーカー vWorkerName をコールし、実行メソッドと引数を指定します
 C_LONGINT(vYear)
 vYear:=2015 // この値はフォーム上でユーザーが選択したかもしれません
 CALL WORKER("myWorker";"workerMethod";vYear;Current form window)

workerMethod のコードは次のとおりです:

  // ワーカーが実行するメソッドです
  // プリエンプティブでもコオペラティブでも可能です
 C_LONGINT($1// 選択年を取得します
 C_LONGINT($2// ウィンドウの参照を取得します
 C_OBJECT(vStatResults// 演算の結果を格納する変数です
 ... // 統計データを算出します
  // 終了後、ワーカーはフォームをコールして、結果を渡します
  // vStatResults でフォーム上に結果を表示します
 CALL FORM($2;"displayStats";vStatResults)



参照 

CALL FORM
Current process name
KILL WORKER
ワーカーについて

 
プロパティ 

プロダクト: 4D
テーマ: プロセス (コミュニケーション)
番号: 1389

This command can be run in preemptive processes

 
履歴 

初出: 4D v15 R5

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)