Use...End use 構造の正式なシンタックスは、以下の通りです:
Use(Shared_object_or_Shared_collection)
statement(s)
End use
Use...End use 構造は、内部セマフォの保護下においてShared_object_or_Shared_collection 引数のタスクを実行する、宣言のシークエンスを定義します。Shared_object_or_Shared_collection 引数には有効な任意の共有オブジェクトあるいは共有コレクションを渡すことができます。
共有オブジェクトおよび共有コレクションは、プロセス間の通信ができるように設計されています。具体的には、プリエンプティブ4Dプロセスです。これらは参照によって引数としてプロセスから他のプロセスへと渡すことができます。共有オブジェクトおよび共有コレクションについての詳細な情報については、共有オブジェクトと共有コレクションのページを参照してください。共有オブジェクトおよび共有コレクションを扱う際には、プロセス間で同時にアクセスしてしまうことを避けるために、必ずそれらをUse...End use キーワードでくくる必要があります。
- Use 行が無事実行されると、対応するEnd use 行が実行されるまで、すべてのShared_object_or_Shared_collection のプロパティ/要素は他のすべてのプロセスに対し書き込みアクセスからロックされます。
- statement(s) のシークエンスは、Shared_object_or_Shared_collection のプロパティ/要素に対して、同時アクセスのリスクなしに、どのような変更も実行することができます。
- Shared_object_or_Shared_collection 引数に他の共有オブジェクトあるいはコレクションがプロパティとして追加された場合、それらも同じ共有グループとして連結されます(共有オブジェクト/共有コレクションを使用するを参照してください)。
- Use...End use シークエンスが実行中に、他のプロセスがShared_object_or_Shared_collection のプロパティあるいは接続したプロパティにアクセスしようとした場合、そのアクセスは自動的に保留され、カレントのシークエンスが終了するまで待機します。
- End use 行は、Shared_object_or_Shared_collection プロパティのロックを解除し、同じロック識別子を共有する全てのオブジェクトのロックも解除します。
- 4D コード内では、複数のUse...End use 構造をネストすることができます。この場合、全てのロックはスタックされ、プロパティ/要素は最後のEnd use の呼び出しが実行されたときに解除されます。
注: コレクションのメンバーファンクション(コレクションメソッド 参照)が共有コレクションを変更する場合、ファンクション実行中は、共有コレクションに対して内部的なUse が自動的に呼ばれます。