4D v16.3

New process

ホーム

 
4D v16.3
New process

New process 


 

New process ( method ; stack {; name {; param {; param2 ; ... ; paramN}}}{; *} ) -> 戻り値 
引数   説明
method  文字 in プロセスで実行させるメソッド
stack  倍長整数 in スタックサイズ (バイト)
name  文字 in 作成するプロセスの名前
param  in メソッドに渡す引数
演算子 in 重複しないプロセス
戻り値  倍長整数 in 新規に作成されたプロセス番号 または既存のプロセス番号

説明   

New process コマンドは、(同じマシン上で) 新しいプロセスを開始し、そのプロセス参照番号を返します。

プロセスが作成できない場合 (例えば、メモリ不足) 、New processは0を返し、エラーが発生します。このエラーはON ERR CALLでインストールされたエラー処理メソッドを使用してとらえることができます。

methodには、新しいプロセスのプロセスメソッド名を指定します。4Dは新規プロセスのコンテキストを設定した後、このメソッドの実行を開始します。したがって、これがプロセスメソッドになります。

stack 引数を使用すると、プロセスのスタックのために割り当てられたメモリ量を指定することができます。この空間が、メソッド呼び出し、ローカル変数、サブルーチンの変数、スタックされたレコードを”積み上げる”ためのメモリーです。

  • デフォルトのスタックサイズを使用するためにはstack に0を渡します。これはほとんどのアプリケーションに適しています(推奨設定)
  • 一部の特定の場合において、カスタムの値を使用したい場合があるかもしれません。その際には値はバイト単位で指定しなければなりません。最小で64K (約64,000バイト) を渡すことができ、プロセスが大掛かりなチェーン呼び出し (サブルーチンがまた他のサブルーチンを呼び出す、などと言った呼び出し)を実行する場合には512KBを超える値を使用することもできます。

注: スタックはプロセスの合計メモリではありません。各プロセスはレコードやインタープロセス変数等のためにメモリを共有します。またプロセスはプロセス変数 の保持に追加のメモリを使用します。スタックには 4D の情報のさまざまな項目が格納されます。スタックに格納される情報の量は、ネストしたメソッドの呼び出し 数、前のフォームが閉じられる前に開かれたフォームの数、ネストしたメソッドで使用されるローカル変数のサイズに基づきます。

64-bit 4D Server についての注: 64-bit 4D Server で実行されるプロセスのスタックは 32-bit 4D Server より多くのメモリー量を必要とします (大体2倍程度)。64-bit 4D Server でコードが実行されることが予測される場合、この引数の値をチェックしてください。

nameには新しいプロセスの名前を指定します。シングルユーザーモードでは、ここで指定した名前がランタイムエクスプローラーのプロセスリストに表示され、この新しいプロセスに対して PROCESS PROPERTIES コマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。ローカルスコープのプロセスを作成するには、名前の先頭にドルサイン ($) をつけます。

重要: クライアント/サーバーにおいて、ローカルプロセスはデータにアクセスしてはいけないことに注意してください。

一つ以上のparam引数を使用して、プロセスメソッドに引数を渡す事ができます。サブルーチンにパラメーターを渡すのと同じ要領でプロセスメソッドに引数を渡します(メソッドに引数を渡すの章を参照して下さい)。プロセスメソッドは、新規プロセスのコンテキスト内で実行を開始する際に、$1$2、等に引数の値を受け取ります。メソッドに対して配列を引数として受け渡すことができない点に留意してください。それに加え、New processコマンドのコンテキストでは以下の条件も考慮する必要があります:

  • テーブルまたはフィールドへのポインターは渡すことができます。
  • 変数、特にローカル変数とプロセス変数へのポインターは、これらの引数がプロセスメソッドからアクセスされたときに定義されていない可能性があることから、推奨されていません。
  • オブジェクト型引数を渡した場合、4Dは到達プロセス内にオブジェクトのコピーを作成します。
注: プロセスメソッドに引数を渡す場合、必ずname引数を指定しなければなりません。この場合、この引数は省略できません。

この最後の引数を指定した場合、4Dははじめにnameに指定した名前を持つプロセスが既に実行されているかどうかを調べます。同一名のプロセスが存在する場合、4Dは新規プロセスを開始せずにその名前を持つプロセスのプロセス番号を返します。

例題  

以下のプロジェクトメソッドがある時:

  ` ADD CUSTOMERS
 SET MENU BAR(1)
 Repeat
    ADD RECORD([Customers];*)
 Until(OK=0)

メニューバーエディタでカスタムメニュー項目にこのプロジェクトメソッドを指定し、新規プロセス開始チェックボックスをチェックしている場合、4Dはそのメソッドを実行する新規プロセスを自動的に開始します。SET MENU BAR(1)を実行すると、この新規プロセスに対してメニューバーが追加されます。ウィンドウ (Open windowコマンドでオープンするウインドウ) が何も存在しない場合、ADD RECORDコマンドを実行することにより、自動的にウィンドウが開かれます。

カスタムのコントロールパネルのボタンをクリックすると、“Add Customers”プロセスが開始されるようにするには、以下のようにします:

  ` bAddCustomers button object method
 $vlProcessID:=New process("Add Customers";0;"Adding Customers")

このボタンは、先に作ったメニュー項目と同じことを行います。

メニュー項目を選択したり、このボタンをクリックすると、プロセスを開始 (そのプロセスが存在しない場合) またはプロセスを前面に配置 (そのプロセスが既に実行中の場合) したい場合、以下のようにSTART ADD CUSTOMERSメソッドを作成することができます:

  ` START ADD CUSTOMERS
 $vlProcessID:=New process("Add Customers";0;"Adding Customers";*)
 If($vlProcessID#0)
    BRING TO FRONT($vlProcessID)
 End if

bAddCustomers のオブジェクトメソッドは以下のようになります:

  ` bAddCustomers button object method
 START ADD CUSTOMERS

メニューバーエディタでADD CUSTOMERSメソッドをSTART ADD CUSTOMERSメソッドと置き換え、メニュー項目の新規プロセス開始チェックボックスを選択解除します。



参照 

Execute on server
プロジェクトメソッド
プロセス
メソッド
変数

 
プロパティ 

プロダクト: 4D
テーマ: プロセス
番号: 317

This command can be run in preemptive processes

 
履歴 

変更: 4D 2004.3

 
ARTICLE USAGE

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