4D v14.3New process |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
New process
|
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の情報が格納されます。スタックに格納される情報の量は、ネストしたメソッドの呼び出し数、前のフォームが閉じられる前に開かれたフォームの数、ネストしたメソッドで使用されるローカル変数のサイズに基づきます。
64-bit 4D Serverに関する注意: 64-bit 4D Serverで実行されるプロセスのスタックは32-bit 4D Serverより多くのメモリー量を必要とします (大体2倍程度)。このことから最低でも128,000バイト、連鎖呼び出しがある場合は一般的に400,000バイト程度のスタックサイズを渡すことが推奨されます。 64-bit 4D Serverでコードが実行されることが予測される場合、この引数の値をチェックしてください。
nameには新しいプロセスの名前を指定します。シングルユーザモードでは、ここで指定した名前が短タイムエクスプローラのプロセスリストに表示され、この新しいプロセスに対してPROCESS PROPERTIESコマンドを実行するとこの名前が返されます。この引数は省略することができます。省略した場合、プロセス名は空の文字列になります。ローカルスコープのプロセスを作成するには、名前の先頭にドルサイン ($) をつけます。
重要: クライアント/サーバにおいて、ローカルプロセスはデータにアクセスしてはいけないことに注意してください。
バージョン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メソッドと置き換え、メニュー項目の新規プロセス開始チェックボックスを選択解除します。
プロダクト: 4D
テーマ: プロセス
番号:
317
変更: 4D 2004.3
Execute on server
プロジェクトメソッド
プロセス
メソッド
変数
ランゲージリファレンス ( 4D v12.4)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)
Inherited from : New process ( 4D v11 SQL Release 6)