version 2004.3 (Modified)
New process (method; stack{; name{; param{; param2; ...; paramN}{; *}}}) 数値
| 引数 | 型 | 説明 | |
| method | 文字列 | プロセスで実行させるメソッド | |
| stack | 数値 | スタックサイズ (バイト) | |
| name | 文字列 | 作成するプロセスの名前 | |
| param | 式 | メソッドに渡す引数 | |
| * | 重複しないプロセス | ||
| 戻り値 | 数値 | 新規に作成されたプロセス番号 | |
| または既存のプロセス番号 |
説明
New process コマンドは、(同じマシン上で) 新しいプロセスを開始し、そのプロセス参照番号を返します。
プロセスが作成できない場合 (例えば、メモリ不足) 、New processは0を返し、エラーが発生します。このエラーはON ERR CALLでインストールされたエラー処理メソッドを使用してとらえることができます。
プロセスメソッド: methodには、新しいプロセスのプロセスメソッド名を指定します。4Dは新規プロセスのコンテキストを設定した後、このメソッドの実行を開始します。したがって、これがプロセスメソッドになります。
プロセススタック: stackには、プロセスのスタックに割り当てるメモリの量を指定します。このメモリ領域にメソッド呼び出し、ローカル変数、サブルーチンの引数、スタックしたレコード等が“積み上げ”られてゆきます。この大きさはバイトで表され、少なくとも64K (約64,000バイト) を渡します。しかし、プロセスでサイズの大きいコールを続けて実行する場合等は (サブルーチンからサブルーチンを呼び出す等) 、これ以上の値を渡すこともできます。例えば、必要なら200K (約200,000バイト) を渡すこともできます。
Note: スタックはプロセスの合計メモリではありません。各プロセスはレコードやインタープロセス変数等のためにメモリを共有します。またプロセスはプロセス変数の保持にメモリを余計に使用します。スタックにはさまざまな4Dの情報が格納されます。スタックに格納される情報の量は、ネストしたメソッドの呼び出し数、前のフォームが閉じられる前に開かれたフォームの数、ネストしたメソッドで使用されるローカル変数のサイズに基づきます。
プロセス名: nameには新しいプロセスの名前を指定します。シングルユーザモードでは、ここで指定した名前が短タイムエクスプローラのプロセスリストに表示され、この新しいプロセスに対してPROCESS PROPERTIESコマンドを実行するとこの名前が返されます。プロセス名は最大31文字まで指定することができます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。ローカルスコープのプロセスを作成するには、名前の先頭にドルサイン ($) をつけます。
重要: クライアント/サーバにおいて、ローカルプロセスはデータにアクセスしてはいけないことに注意してください。
プロセスメソッドの引数: バージョン6より、プロセスメソッドに引数を渡せるようになりました。サブルーチンにパラメータを渡すのと同じ要領でプロセスメソッドに引数を渡します。しかし制約があります。ポインタ表現は渡すことができません。また、メソッドに対して配列を引数として受け渡すことができない点にも留意してください。プロセスメソッドは、新規プロセスのコンテキスト内で実行を開始する際に、$1, $2等に引数の値を受け取ります。
Note: プロセスメソッドに引数を渡す場合、必ず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";32*1024;"Adding Customers")
このボタンは、先に作ったメニュー項目と同じことを行います。
メニュー項目を選択したり、このボタンをクリックすると、プロセスを開始 (そのプロセスが存在しない場合) またはプロセスを前面に配置 (そのプロセスが既に実行中の場合) したい場合、以下のようにSTART ADD CUSTOMERSメソッドを作成することができます:
` START ADD CUSTOMERS
$vlProcessID:=New process("Add Customers";64*1024;"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, プロジェクトメソッド, プロセス, メソッド, 変数.