[前へ] [目次へ] [次へ]

FGESThread (ネイティブクラス)


このクラスはスレッドを扱うクラスです。

このクラスのインスタンスはFGES VMだけが作成しても良いことになっています。
これはFGES VM自体がこのクラスのインスタンスを処理するため、
不完全な状態のインスタンスを放置するとFGES VMがクラッシュする可能性があるためです。

このクラスは実体化不可です。FGES上でインスタンスを作成することはできません。

このクラスは参照カウント方式のメモリ管理を適用します。
FGES上でこのクラスのインスタンスにはスレッドハンドル( HThread )を介してアクセスし、
このクラスのインスタンスを直接捕捉することは認められていません。
C++レベルではこのクラスのインスタンスを捕捉できますが、
参照カウントを捕捉した側の責任で操作しなければいけません。

●継承

   このクラスは継承をしていません。

●インターフェイスとインターフェイスメソッド

   このクラスはインターフェイスの実装宣言をしていません。

●クラスメソッド

   このクラスはクラスメソッドを持っていません。

●クラスメンバメソッド

名前概要
public操作メソッド Callこのスレッドでメソッドを呼び出します
public操作メソッド Reserveこのスレッドでメソッドを予約します
public操作メソッド CallVこのスレッドでメソッドを呼び出します
public操作メソッド ReserveVこのスレッドでメソッドを予約します
public操作メソッド ConstCallこのスレッドでメソッドを呼び出します
public操作メソッド ConstReserveこのスレッドでメソッドを予約します
public操作メソッド ConstCallVこのスレッドでメソッドを呼び出します
public操作メソッド ConstReserveVこのスレッドでメソッドを予約します
public操作メソッド CallIこのスレッドでメソッドを呼び出します
public操作メソッド ReserveIこのスレッドでメソッドを予約します
public操作メソッド CallIVこのスレッドでメソッドを呼び出します
public操作メソッド ReserveIVこのスレッドでメソッドを予約します
public操作メソッド Suspendこのスレッドを休止状態にします
public操作メソッド Resumeこのスレッドを休止状態から復帰します
public操作メソッド Executeこのスレッドを実行します
public取得メソッドconst GetStateこのスレッドの状態を取得します
public操作メソッド Haltこのスレッドで実行中の応答するメソッドを中断します
public操作メソッド CreateChildThreadこのスレッドを親とする子スレッドを生成します
public操作メソッド BindFGES VMの実行をこのスレッドに拘束します
public操作メソッド UnBindFGES VMの実行の拘束を解除します

●クラス共有変数

   このクラスはクラス共有変数を持っていません。

●インスタンス変数

   このクラスはインスタンス変数を持っていません。


●C++レベル追加情報

クラスID: FGES_CLASSID_THREAD
クラス名: FGESThread



FGESThread::Call

public Bool Call(editable Any? hostobj, FGESMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   また、呼び出したメソッドの戻り値は取得できません。

戻り値:呼び出しに成功すると真を返します

editable Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::Reserve

public Bool Reserve(editable Any? hostobj, FGESMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   また、予約したメソッドの戻り値は取得できません。

戻り値:予約に成功すると真を返します

editable Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::CallV

public Bool CallV(editable Any? hostobj, FGESMethod callmethod,
             Arguments arg_list,editable Any? after_delete_obj=NULL)


   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   また、呼び出したメソッドの戻り値は取得できません。

   after_delete_obj に指定するオブジェクトはローカル変数か、メモリ管理オブジェクトに直接接続されている必要があり、
   このメソッドは指定されたオブジェクトのメモリ管理をネイティブ管理に変更します。
   指定されたオブジェクトの寿命は呼び出したメソッドの完了までになります。
   
戻り値:呼び出しに成功すると真を返します

editable Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます
editable Any? after_delete_obj=NULL :呼び出したメソッドの完了後に削除するオブジェクト。
      空参照を指定した場合は無視します。

先頭へ


FGESThread::ReserveV

public Bool ReserveV(editable Any? hostobj, FGESMethod callmethod,
             Arguments arg_list,editable Any? after_delete_obj=NULL)


   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   また、予約したメソッドの戻り値は取得できません。

   after_delete_obj に指定するオブジェクトはローカル変数か、メモリ管理オブジェクトに直接接続されている必要があり、
   このメソッドは指定されたオブジェクトのメモリ管理をネイティブ管理に変更します。
   指定されたオブジェクトの寿命は呼び出したメソッドの完了までになります。
   
戻り値:予約に成功すると真を返します

editable Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます
editable Any? after_delete_obj=NULL :呼び出したメソッドの完了後に削除するオブジェクト。
      空参照を指定した場合は無視します。

先頭へ


FGESThread::ConstCall

public Bool ConstCall( Any? hostobj, FGESMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   さらに、呼び出しのホストオブジェクトが readonly なので、
   呼び出すメソッドは const メソッドでなければいけません。
   また、呼び出したメソッドの戻り値は取得できません。

戻り値:呼び出しに成功すると真を返します

Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::ConstReserve

public Bool ConstReserve( Any? hostobj, FGESMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   さらに、呼び出しのホストオブジェクトが readonly なので、
   呼び出すメソッドは const メソッドでなければいけません。
   また、予約したメソッドの戻り値は取得できません。

戻り値:予約に成功すると真を返します

Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::ConstCallV

public Bool ConstCallV( Any? hostobj, FGESMethod callmethod,
             Arguments arg_list,editable Any? after_delete_obj=NULL)


   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   さらに、呼び出しのホストオブジェクトが readonly なので、
   呼び出すメソッドは const メソッドでなければいけません。
   また、呼び出したメソッドの戻り値は取得できません。

   after_delete_obj に指定するオブジェクトはローカル変数か、メモリ管理オブジェクトに直接接続されている必要があり、
   このメソッドは指定されたオブジェクトのメモリ管理をネイティブ管理に変更します。
   指定されたオブジェクトの寿命は呼び出したメソッドの完了までになります。
   
戻り値:呼び出しに成功すると真を返します

Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます
editable Any? after_delete_obj=NULL :呼び出したメソッドの完了後に削除するオブジェクト。
      空参照を指定した場合は無視します。

先頭へ


FGESThread::ConstReserveV

public Bool ConstReserveV( Any? hostobj, FGESMethod callmethod,
             Arguments arg_list,editable Any? after_delete_obj=NULL)


   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   hostobj に指定するオブジェクトは呼び出すメソッドの対象クラスまたは、
   その派生クラスでなければいけません。
   さらに、呼び出しのホストオブジェクトが readonly なので、
   呼び出すメソッドは const メソッドでなければいけません。
   また、予約したメソッドの戻り値は取得できません。

   after_delete_obj に指定するオブジェクトはローカル変数か、メモリ管理オブジェクトに直接接続されている必要があり、
   このメソッドは指定されたオブジェクトのメモリ管理をネイティブ管理に変更します。
   指定されたオブジェクトの寿命は呼び出したメソッドの完了までになります。
   
戻り値:予約に成功すると真を返します

Any? hostobj :呼び出しのホストオブジェクト
FGESMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます
editable Any? after_delete_obj=NULL :呼び出したメソッドの完了後に削除するオブジェクト。
      空参照を指定した場合は無視します。

先頭へ


FGESThread::CallI

public Bool CallI( INativeMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   呼び出すメソッドとして BoundMethod のインスタンスを指定できます。
   また、呼び出したメソッドの戻り値は取得できません。

戻り値:呼び出しに成功すると真を返します

INativeMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::ReserveI

public Bool ReserveI( INativeMethod callmethod,...)

   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   呼び出すメソッドとして BoundMethod のインスタンスを指定できます。
   また、予約したメソッドの戻り値は取得できません。

戻り値:予約に成功すると真を返します

INativeMethod callmethod :呼び出すメソッド
可変長引数:呼び出すメソッドの引数としてそのまま使われます

先頭へ


FGESThread::CallIV

public Bool CallIV( INativeMethod callmethod, Arguments arg_list)

   このオブジェクトが示すスレッドコンテキストでメソッドを呼び出します。
   呼び出したメソッドは次に目標のスレッドが実行権を取得した時に実行が開始されます。
   ただし、実行が開始される前にさらに呼び出しが行われた場合はその完了まで実行が開始されません。
   
   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。
   
   呼び出すメソッドとして BoundMethod のインスタンスを指定できます。
   また、呼び出したメソッドの戻り値は取得できません。

戻り値:呼び出しに成功すると真を返します

INativeMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます

先頭へ


FGESThread::ReserveIV

public Bool ReserveIV( INativeMethod callmethod, Arguments arg_list)

   このオブジェクトが示すスレッドコンテキストでメソッドを予約します。
   予約したメソッドは目標のスレッドの呼び出しスタックの最下層に挿入され、
   目標のスレッドが現在実行しているメソッドが全て終了した後、   実行が開始されます。

   引数のオブジェクトは実行が開始されるまで存在していなければいけません。
   ローカル変数や一時オブジェクトを引数に使うと例外の原因になります。

   呼び出すメソッドとして BoundMethod のインスタンスを指定できます。
   また、予約したメソッドの戻り値は取得できません。

戻り値:予約に成功すると真を返します

INativeMethod callmethod :呼び出すメソッド
Arguments arg_list :呼び出すメソッドの引数として展開されます

先頭へ


FGESThread::Suspend

public Bool Suspend()

   このオブジェクトが示すスレッドを休止状態にします。
   休止状態になったスレッドは解除されるまで実行されなくなります。
   
   既に休止状態であった場合何も起こりません。

戻り値:この呼び出しで状態が変化した場合、真を返します

先頭へ


FGESThread::Resume

public Bool Resume()

   このオブジェクトが示すスレッドの休止状態を解除します。
   
   目標のスレッドが休止状態でなかった場合何も起こりません。

戻り値:この呼び出しで状態が変化した場合、真を返します

先頭へ


FGESThread::Execute

public THREAD_RESULT Execute()

   このオブジェクトが示すスレッドを一定時間実行します。
   実行時間は呼び出し元のスレッドの割り当て時間から消費されます。
   
   結果は HThread クラスに定義された定数(クラス共有変数)で返されます。

戻り値:以下のいずれかを返します。
識別子意味
HThread::EMPTY目標のスレッドで実行するものは何もありませんでした。
HThread::SUSPEND目標のスレッドは休止状態のため、何も実行されませんでした。
HThread::WAIT目標のスレッドは待機状態のため、何も実行されませんでした。
この状態はネイティブレベルの待機状態でのみ反応し、FGESレベルの待機では設定されません。
HThread::COMPLETE目標のスレッドで実行中のメソッドはこの呼び出しで全て完了しました。
HThread::PAUSE目標のスレッドの実行中にスレッド切り替え命令が実行されました。
HThread::TIMEOUT目標のスレッドは規定時間一杯に実行され、時間切れで一時停止しました。

先頭へ


FGESThread::GetState

public THREAD_RESULT GetState()

   このオブジェクトが示すスレッドの現在の状態を取得します。
   
   結果は HThread クラスに定義された定数(クラス共有変数)で返されます。

戻り値:以下のいずれかを返します。
識別子意味
HThread::EMPTY目標のスレッドは何もしていません。
HThread::SUSPEND目標のスレッドは休止状態です。
HThread::WAIT目標のスレッドは待機状態です。
この状態はネイティブレベルの待機状態でのみ反応し、FGESレベルの待機では設定されません。
HThread::PAUSE目標のスレッドは実行時間の割り当て待ちです。
HThread::CHILDONLY目標のスレッド自身は何もしていませんが、子スレッドにタスクがあります。

先頭へ


FGESThread::Halt

public Bool Halt( HaltID halt_id)

   このオブジェクトが示すスレッドで実行中の指定した中断識別子に応答するメソッドを中断します。
   
   このメソッドは対象のスレッドで実行中の、指定した中断識別子に対する中断可能宣言をしている、
   最も現在の実行位置に近いメソッドを対象として中断を要求します。
   対象となるメソッドが存在しない場合、このメソッドは失敗します。
   中断の要求が成功した場合、そのメソッドより実行位置に近いメソッドのうち、
   中断可能宣言をしているメソッド全ても中断されます。
   中断の詳細は スレッド の項目を参照してください。

HaltID halt_id :中断要求する中断識別子

先頭へ


FGESThread::CreateChildThread

public HThread CreateChildThread()

   このオブジェクトが示すスレッドを親とする子スレッドを生成します。
   
   このメソッドが生成する子スレッドは親スレッドから実行時間を供給されます。
   子スレッドの詳細は スレッド の項目を参照してください。

戻り値:生成した子スレッドを示すスレッドハンドル。

先頭へ


FGESThread::Bind

public void Bind()

   FGES VMの実行をこのハンドルが示すスレッドに拘束します。
   
   スレッドを拘束している間、
   FGES VMスレッドスケジューラは拘束しているスレッドのみに実行時間を供給します。
   ただし、スレッドを指定して直接実行した場合は当該スレッドが実行されます。
   スレッドの拘束はネイティブの FGESThread::ThreadExec や HThread::Execute の処理を妨げるものではありません。

   また、拘束しているスレッドがクリティカルセクションで待機状態になった場合、
   該当するクリティカルセクションの実行権を持っているスレッドを代わりに駆動し、デッドロックの回避を試みます。

   スレッドを拘束したままタスクを全て完了させるべきではありません。
   スレッドの拘束を行う場合は原則として当該スレッドで拘束を解除してください。
   
   スレッドを長時間拘束すると他のFGESスレッドが動作せず問題が起きる可能性があります。
   スレッドの拘束はできる限り短時間に留めてください。
   
   既にスレッドが拘束されている状態でこのメソッドが呼び出された場合、
   スレッドの拘束は累積し、拘束したのと逆順で拘束を解除しなければいけません。
   
先頭へ


FGESThread::UnBind

public Bool UnBind()

   このハンドルが示すスレッドが行っているスレッドの拘束を解除します。
   
   スレッドが累積して拘束されている場合、拘束の解除は逆順に行わなければいけません。
   
戻り値:拘束解除に成功すると真を返します。
   
先頭へ


[前へ] [目次へ] [次へ]

最終更新 2022/05/30