このクラスはマイグレーション呼び出しのための非同期管理機能を提供します。 [詳解]
#include <NetZ/src/Core/DOCore/MigrationContext.h>
公開型 | |
typedef void(* | CompletionCallback) (CallContext *, const UserContext *) |
CompletionCallback を定義します。 [詳解] | |
enum | Flags { SynchronousCall = CallContext::FirstFlagAvailable, TargetObjectMustBeMaster = (CallContext::FirstFlagAvailable<<1), TargetObjectMustHaveAuthority = (CallContext::FirstFlagAvailable<<2), RetryOnTargetValidationFailure = (CallContext::FirstFlagAvailable<<3), CallOnDuplicas = (CallContext::FirstFlagAvailable<<4), CallOnMaster = (CallContext::FirstFlagAvailable<<5), CallOnTargetStation = (CallContext::FirstFlagAvailable<<6), CallOnNeighbouringStations = (CallContext::FirstFlagAvailable<<7), CallOnLocalStation = (CallContext::FirstFlagAvailable<<8) } |
DOCallContext に使用可能な各種フラグを列挙します。 [詳解] | |
enum | Outcome { UnknownOutcome = QERROR(Core, Unknown), Success = QSUCCESS(DOCore, Success), ErrorStationNotReached = QERROR(DOCore, StationNotReached), ErrorTargetStationDisconnect = QERROR(DOCore, TargetStationDisconnect), ErrorLocalStationLeaving = QERROR(DOCore, LocalStationLeaving), ErrorObjectNotFound = QERROR(DOCore, ObjectNotFound), ErrorInvalidRole = QERROR(DOCore, InvalidRole), ErrorCallTimeout = QERROR(DOCore, CallTimeout), ErrorRMCDispatchFailed = QERROR(DOCore, RMCDispatchFailed), ErrorMigrationInProgress = QERROR(DOCore, MigrationInProgress), ErrorInvalidParameters = QERROR(Core, InvalidArgument), ErrorAccessDenied = QERROR(Core, AccessDenied), ErrorNoAuthority = QERROR(DOCore, NoAuthority), NoTargetStationSpecified = QERROR(DOCore, NoTargetStationSpecified), CallPostponed = QSUCCESS(DOCore, CallPostponed), ErrorReliableSendBufferFull = QERROR(Transport, ReliableSendBufferFull), ErrorInvalidSubStreamID = QERROR(Transport, InvalidSubStreamID), ErrorPacketBufferFull = QERROR(Transport, PacketBufferFull) } |
この列挙体は、呼び出しの結果を表します。 [詳解] | |
enum | State { Available, CallInProgress, CallSuccess, CallFailure, CallCancelled } |
CallContext の状態を列挙します。 [詳解] | |
enum | Type { RMC, FetchCall, MigrationCall } |
呼び出し種類を示すための列挙体です。 [詳解] | |
公開メンバ関数 | |
MigrationContext (qBool bSynchronousCall=true) | |
オブジェクトを初期化します。 [詳解] | |
RefCountedObject * | AcquireRef () |
参照カウントを 1 増加させます。 | |
qBool | Cancel (State eNewState=CallCancelled) |
この呼び出しは、DOCallContextが削除された場合に自動的にキャンセルされます。 [詳解] | |
qBool | Cancel () |
この CallContext に関連付けられている非同期処理をキャンセルします。 [詳解] | |
void | ClearFlag (qUnsignedInt32 uiFlag) |
SetFlag を使用して設定されたフラグをクリアします。 [詳解] | |
void | ClearTargets () |
このDOCallContextに前に設定されていた対象のステーション情報を消去します。 [詳解] | |
qBool | FlagIsSet (qUnsignedInt32 uiFlag) const |
特定のフラグが設定されているかどうかを返します。 [詳解] | |
virtual qBool | FlagsAreValid () const |
フラグ(Flags)の組み合わせが正しいかどうかを取得します。 [詳解] | |
DOHandle | GetMigratingObject () |
マイグレーションを行っている複製オブジェクトへのハンドルを取得します。 [詳解] | |
DOCallContext::Outcome | GetOutcome () const |
非同期処理の結果を DOCallContext::Outcome として取得します。 [詳解] | |
State | GetState () const |
CallContext の現在の状態を返します。 [詳解] | |
SubStreamID | GetSubStreamID () const |
Reliable通信の場合に、送信時に使うSubStreamIDを取得します。 [詳解] | |
DOHandle | GetTargetStation () |
呼び出し対象のステーションを取得します。 [詳解] | |
const UserContext & | GetUserContext (size_t iIndex) const |
この CallContext に関連付けられている UserContext を返します。 [詳解] | |
void | RegisterCompletionCallback (CompletionCallback pfCompletionCallback, const UserContext &oContext, qBool bAddToEnd=true) |
この CallContext の完了時に実行するコールバック関数を設定します。 [詳解] | |
void | RegisterCompletionCallback (CallbackRoot *pCallback, qBool bCallOnSuccess=true, qBool bAddToEnd=true) |
この CallContext の完了時に実行するコールバックオブジェクトを設定します。 [詳解] | |
template<typename TCallback > | |
void | RegisterCompletionCallbackGeneric (const TCallback &callback, qBool deleteCallbackAfterCall=false, qBool bAddToEnd=true) |
この DOCallContext の完了時に実行するコールバックを設定します。 [詳解] | |
void | ReleaseRef () |
参照カウントを 1 減少させます。0 になるときに自分自身を delete します。 | |
qBool | Reset () |
CallContext の状態を利用可能に再設定します。 [詳解] | |
void | SetFlag (qUnsignedInt32 uiFlag) |
非同期処理に使用するフラグを設定します。 [詳解] | |
void | SetSubStreamID (SubStreamID subStreamID) |
Reliable通信の場合に、送信時に使うSubStreamIDを指定します。 [詳解] | |
void | SetTargetStation (DOHandle hTargetStation) |
呼び出し対象のステーションを設定します。 [詳解] | |
void | SetTimeout (TimeInterval tiTimeout) |
非同期処理のタイムアウトをセットします。 [詳解] | |
void | SetUserContext (size_t iIndex, const UserContext &oUserContext) |
この CallContext に関連付けられている UserContext を設定します。 [詳解] | |
qBool | Wait (qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
非同期処理が完了するまたはタイムアウトを越えるまで、システムを待機させます。 [詳解] | |
qBool | WaitWithoutDispatch (qUnsignedInt32 uiTimeout=WAIT_INFINITE_TIMEOUT) |
非同期処理が完了する、またはタイムアウトを越えるまで待機します。 [詳解] | |
静的公開メンバ関数 | |
static const qChar * | GetOutcomeString (Outcome uOutcome) |
DOCallContext::Outcome の値を該当する名前へ変換します。 [詳解] | |
このクラスはマイグレーション呼び出しのための非同期管理機能を提供します。
マイグレーションとは、複製オブジェクトのコントロール権限がステーション間で移転することを言います。
複製オブジェクトのマイグレーションを実行する前に、必ずこのクラスによって呼び出しを定義する必要があります。 このクラスを超えない範囲でフラグを設定したり、CallContext::State や DOCallContext::Outcome 関数呼び出しによる情報の取得を行うことが出来ます。 マイグレーションは、DuplicatedObject::Emigrate(MigrationContext*, DOHandle) または、 DuplicatedObject::AttemptEmigration(DOHandle) を呼び出すことで実行することが出来ます。
マイグレーションには大きく分けて二つのプロセスがあり、 最初に実行される複製オブジェクトの権限が移行するプロセスのことをエミグレーション(emigration)、 次に実行される複製オブジェクトを受け入れるプロセスをイミグレーション(immigration)と呼びます。
|
inherited |
CompletionCallback を定義します。
処理完了時に特定のユーザー定義関数が呼び出されるように、CompletionCallback を RegisterCompletionCallback() で登録します。
|
inherited |
|
inherited |
DOCallContext に使用可能な各種フラグを列挙します。
列挙値 | |
---|---|
SynchronousCall |
この呼び出しは同期呼び出しとなります(関数は作業をすべて終えるまで返ってきません)。 |
TargetObjectMustBeMaster |
この呼び出しはオブジェクトの複製マスターのみで呼び出されます。 このフラグはRMCContext のためのみに存在しています。CallOnMasterフラグが同時にセットされているときのみ有効です。 また、RetryOnTargetValidationFailureフラグと一緒に利用されることがあります。 |
TargetObjectMustHaveAuthority |
この呼び出しを行うとき、対象となっているオブジェクトに権限がある必要があります(DuplicatedObject::HasAuthority を参照)。 このフラグはRMCContext のためのみに存在しています。CallOnMasterフラグが同時にセットされているときのみ有効です。 また、RetryOnTargetValidationFailureフラグと一緒に利用されることがあります。 |
RetryOnTargetValidationFailure |
この呼び出しの結果(Outcome)が、ErrorInvalidRoleまたはErrorNoAuthorityのときに、 複製マスターに対してもう一度同一のメッセージを、Successが返ってくるか、 あるいはErrorInvalidRoleかErrorNoAuthority以外のエラーが返るまで送信し続けます。 このフラグはRMCContext のためのみに存在しています。CallOnMasterフラグと TargetObjectMustHaveAuthorityまたはTargetObjectMustBeMasterのうちどちらかがセットされているときのみ有効です。 |
CallOnDuplicas |
この呼び出しは、すべてのデュプリカに呼び出されます。 このフラグはRMCContext のためのみに存在しています。OneWayCallフラグも同時にセットされているときのみ有効です。 複製マスターからのみ呼び出すことができます。 |
CallOnMaster |
この呼び出しは、複製マスターに呼び出されます。 このフラグはRMCContext のためのみに存在しています。呼び出し対象オブジェクトが 複製マスターであると確認できた場合のみにFlagsAreValid() テストを正しく通過することが出来ます。 これを通過するためには、正しい対象の複製オブジェクトへの参照を持っている必要があります。 |
CallOnTargetStation |
このフラグは直接使用しないでください。SetTargetStation 関数が呼び出されたときに自動的にセットされます。 |
CallOnNeighbouringStations |
メソッドは、全ての近傍ステーションに対して呼び出されます。 つまり、ローカルステーションが知りうるセッション中の全ステーションに対して呼び出されます。 近傍ステーションとしてどのステーションが選択されるかは、ローカルステーションが使用する 複製スペース、あるいはその他の発見メカニズムに依存します。このフラグは RMCContext に対してのみセットすることができ、OneWayCall フラグが同時にセットされているときのみ有効です。 現在の実装は、CallOnDuplicas相当ですので、CallOnDuplicasの利用を推奨します。 |
CallOnLocalStation |
このメソッドはローカルステーションに対して呼び出されます。RMCContext のためだけに存在しています。 |
|
inherited |
この列挙体は、呼び出しの結果を表します。
列挙値 | |
---|---|
UnknownOutcome |
この呼び出しはまだ終了していないので、結果は不明です。 |
Success |
この呼び出しは正常に終了しました。 |
ErrorStationNotReached |
この呼び出しが対象のステーションにまで到達しませんでした。 |
ErrorTargetStationDisconnect |
この呼び出しは実行されましたが、返答を受け取る前に対象のステーションが切断しました。 |
ErrorLocalStationLeaving |
この呼び出しは実行されましたが、ローカルステーションがセッションから離脱中なので、 返答メッセージは受け取りません。 |
ErrorObjectNotFound |
この呼び出しが呼び出されたオブジェクトが、呼び出しの対象のステーションに見つかりませんでした。 |
ErrorInvalidRole |
オブジェクトは見つかりましたが、期待された役割ではありませんでした。 たとえば、TargetObjectMustBeMaster フラグがセットされていたのに、 RMC(リモートメソッドコール)の対象が複製マスターではない場合にこの結果となります。 |
ErrorCallTimeout |
呼び出しはタイムアウトを経過したため完了しませんでした。 |
ErrorRMCDispatchFailed |
RMCのメソッド呼び出しが失敗しました。DDL(データ定義言語)のバージョンが、 呼び出し元と呼び出し先で競合していることが原因である可能性があります。 もしくは、呼び出し先で該当するRMCのメソッドがない可能性があります。 この結果は、RMCContext でのみ返ります。 |
ErrorMigrationInProgress |
オブジェクトはマイグレーション(複製オブジェクトコントロール権のステーション間移動)中です。 この結果は、MigrationContext でのみ有効です。 |
ErrorInvalidParameters |
呼び出しは、無効なパラメータで行われました。 文字列がDDL(データ定義言語)で指定されたサイズを超えた大きさで呼び出されたか、 フラグの組み合わせに問題がある場合などにこの結果となります。 |
ErrorAccessDenied |
この呼び出しは対象で拒否されました。 |
ErrorNoAuthority |
オブジェクトは見つかりましたが、呼び出しにTargetObjectMustHaveAuthorityフラグが ついているのに、対象のオブジェクトに権限がついていない場合に返ります。 権限についての詳細はDuplicatedObject::HasAuthority() を参照してください。 |
NoTargetStationSpecified |
この関数呼び出しの対象となるステーションは指定されませんでした。 |
CallPostponed |
この関数呼び出しは延期されました。 CallMethodOperation::PostponeOperation を経由すると、関数呼び出しは延期されます。 |
ErrorReliableSendBufferFull |
送信バッファが一時的にいっぱいになり、呼び出しができませんでした。 |
ErrorInvalidSubStreamID |
指定されたSubStreamIDが不適切で、相手と通信できません。 |
ErrorPacketBufferFull |
パケットバッファが不足しているため、呼び出しができませんでした。パケットバッファの設定はPacketBufferManager を参照してください。 |
|
inherited |
CallContext の状態を列挙します。
非同期処理を開始すると Available から CallInProgress に遷移し、処理が終了すると CallSuccess、CallFailure、CallCancelled のいずれかの完了状態に遷移します。
列挙値 | |
---|---|
Available |
実行可能。 |
CallInProgress |
処理を実行中。この状態のときは他の非同期処理の Context としては使用できません。 |
CallSuccess |
処理が成功して終了しました。 |
CallFailure |
処理が失敗して終了しました。 |
CallCancelled |
処理がキャンセルされました。 |
nn::nex::MigrationContext::MigrationContext | ( | qBool | bSynchronousCall = true | ) |
オブジェクトを初期化します。
デフォルトでは、マイグレーション(複製オブジェクトのコントロール間移転)は、同期実行されます。 同期実行される場合、システムはマイグレーションが終了するか、あるいはエラーが発生するまで返ってこなくなります。 DOCallContext::Wait 関数を利用することによって、非同期実行された呼び出しを終了するまで待機することが出来ます。
オブジェクトを直接指定してマイグレーションを実行する場合、DuplicatedObject::Emigrate(MigrationContext*, DOHandle) 関数を利用します。
[in] | bSynchronousCall | 同期実行するかどうかを指定します。デフォルトはtrue(同期実行する)となります。 |
DOHandle nn::nex::MigrationContext::GetMigratingObject | ( | ) |
マイグレーションを行っている複製オブジェクトへのハンドルを取得します。
複製オブジェクトハンドル(DOHandle)とは、セッション中で複製オブジェクトを一意に表す値です。 この関数によって、マイグレーション(複製オブジェクトのコントロール間移転)を行っている 複製オブジェクトへのハンドルを取得することが出来ます。
|
inherited |
呼び出し対象のステーションを設定します。
この関数が呼び出されたときに、CallOnTargetStationフラグが自動的に設定されます。 コンストラクタになにも引数を設定しなかった場合、対象のステーションはINVALID_DOHANDLEとなります。 「対象となるステーション」の意味は、オブジェクトの型(派生先のクラス)によって異なります。 たとえば、RMCContext では、対象のステーションとは、RMC(リモートメソッドコール)の呼び出し先となります。 FetchContext では、デュプリカを取ってくる対象のステーションになります。 MigrationContext では、オブジェクトの移転先のステーションとなります。
[in] | hTargetStation | 呼び出し対象となるステーションのハンドル。 |
|
inherited |
呼び出し対象のステーションを取得します。
一般的には、この関数はSetTargetStation() にて設定されたステーションへの 複製オブジェクトハンドル(DOHandle)を返します。 しかし、OneWayCall(Flags を参照)が指定されていないRMC(リモートメソッドコール)については、 この関数はSetTargetStation() で指定したステーションか、CallOnMasterかCallOnLocalStationフラグが返ります。 OneWayCallフラグがセットされていたら、他のフラグによってセットされたほかの対象のステーションにかかわらず SetTargetStation() でセットされたステーションを返します。
|
virtualinherited |
フラグ(Flags)の組み合わせが正しいかどうかを取得します。
true フラグの組み合わせが正しいときに返ります。
false フラグの組み合わせが正しくないかエラーが発生したときに返ります。
nn::nex::CallContextを再実装しています。
|
inherited |
このDOCallContextに前に設定されていた対象のステーション情報を消去します。
この関数は、このDOCallContextオブジェクトに設定されているすべての対象に関するフラグを降ろします。 その後、対象のステーションへの複製オブジェクトハンドルをINVALID_DOHANDLEに設定します(これがデフォルト状態)。 確実に正しい対象に対してこの呼び出しが実行されるために、対象のステーションを設定する前にこの関数を実行します。
|
inherited |
非同期処理が完了するまたはタイムアウトを越えるまで、システムを待機させます。
DOCallContext::Flags の SynchronousCall が オフの時に呼び出すことができます。
|
inherited |
この呼び出しは、DOCallContextが削除された場合に自動的にキャンセルされます。
このDOCallContextが呼び出しに対してキャンセルを許可しない場合(マイグレーションの呼び出しの場合)、 呼び出しは終了するまでロックアップします。
|
inherited |
この CallContext に関連付けられている非同期処理をキャンセルします。
CallContext に関連付けされた非同期処理のうち、まだ実行されていない処理を放棄します。 本関数から戻った後は非同期処理開始時にセットした out 引数を解放する事ができます。
すでに実行されている処理については取り消す事は出来ず、どこまで処理されたかを知る方法はありません。 例えば、サーバーに対して何らかのリクエストを行う処理をキャンセルした場合、サーバーへのリクエストを送信した後に キャンセルが行われてもそのリクエストはサーバーで処理されます。その結果を呼び出し側で受信してもそれを無視するという動作になります。
主に非同期処理の結果を無視して良い状況で非同期処理開始時にセットしたout引数を解放する目的で使用してください。
本関数で非同期処理がキャンセルされた場合、返値は true となり非同期処理の結果は QERROR(Core, Cancelled) になります。 ステートが CallInProgress 以外だった場合にキャンセルした場合は返値は false となり、キャンセル処理は行われません。
true 非同期処理がキャンセルされた。(ステートが CallInProgress だった場合)
false 非同期処理が開始されていないものをキャンセルしようとした。(ステートが Available だった場合。) もしくはすでに非同期処理が完了していた。(ステートが CallSuccess もしくは CallFailure もしくは CallCancelled だった場合。)
|
inherited |
Reliable通信の場合に、送信時に使うSubStreamIDを指定します。
デフォルトは SubStreamIDDefine::SYSTEMで、システムと共用です。
[in] | subStreamID | 送信時に利用するSubStreamID |
|
inherited |
Reliable通信の場合に、送信時に使うSubStreamIDを取得します。
デフォルトは SubStreamIDDefine::SYSTEMで、システムと共用です。
|
inherited |
非同期処理の結果を DOCallContext::Outcome として取得します。
特定の非同期処理に対する結果を取得します。 結果の内容については CallContext をパラメータとしてとる関数を参照してください。
|
inherited |
この DOCallContext の完了時に実行するコールバックを設定します。
設定したコールバックはこの DOCallContext が完了状態に遷移したときに呼び出されます。 このコールバックを使用することで、 DOCallContext が完了したかどうかを確認するためにポーリングする手間を省くことができます。
callback には DOCallContext* を引数に取る関数ポインタ、関数オブジェクト、ラムダ式を指定できます。 AddCallContextArgumentAdapter() を併用すると引数を一つも取らない関数を渡すこともできます。
関数オブジェクトを渡す場合は値もしくは参照型で渡す方法とポインタ型で渡す方法の二種類があり、それぞれ挙動が異なります。 値もしくは参照型で渡した場合は内部で関数オブジェクトがコピーもしくはムーブされ、コールバックはそのコピーもしくはムーブされたオブジェクトに対して行われます。 そのため、本関数呼び出し後は指定したオブジェクトを即座に破棄する事ができます。 ポインタ型で渡した場合は、コールバックはそのポインタが指すオブジェクトに対して行われます。 そのため、コールバックが呼び出されるまでその関数オブジェクトを呼び出し側で保持しておく必要があります。
本関数を複数回呼び出すことで複数のコールバックを登録することが出来ます。 複数のコールバックを登録した場合はデフォルトでは登録順にコールバックの呼び出しが行われ、最初に登録されたコールバックは最初に呼び出されます。 この順序を変更したい場合は、コールバックを登録する際に bAddToEnd パラメータを設定する必要があります。
callback に関数オブジェクトをポインタで渡した場合は deleteCallbackAfterCall を true にする事で callback の呼び出し後に自動的に callback を delete することができます。 もし callback を delete するのではなくアプリケーション独自の解放処理を行いたい場合は、 再度本関数を呼び出しそのための関数オブジェクトを追加する事で実装が可能です。
コールバック関数内では NEX のブロック関数を呼び出さないようにしてください。
[in] | callback | コールバックする関数ポインタもしくは関数オブジェクトもしくはラムダ式。 |
[in] | deleteCallbackAfterCall | callback の実行が完了した後自動的に callback を delete するかどうか。 |
[in] | bAddToEnd | true(デフォルト)であれば、コールバックはリストの最後に追加されます。falseであればリストの先頭に追加されます。 |
|
inherited |
非同期処理のタイムアウトをセットします。
非同期処理の開始後 tiTimeout ミリ秒後に非同期処理が完了していない( CallInProgress )場合に、 自動的に状態が CallFailure に移行し、 GetOutcome() で取得できる qResult が QRESULT(Core, Timemout) になります。
[in] | tiTimeout | タイムアウト時間(ミリ秒) |
|
inherited |
CallContext の現在の状態を返します。
NEX のスレッドモードがスレッドアンセーフモードであっても、本関数は Scheduler::Dispatch() を含む任意の他の関数と同時に呼び出すことができます。
|
inherited |
この CallContext に関連付けられている UserContext を設定します。
[in] | iIndex | この CallContext に関連付けられている UserContext のユーザー定義インデックスです。 |
[in] | oUserContext | この CallContext に関連付けされている UserContext へのポインタ。 |
|
inherited |
この CallContext に関連付けられている UserContext を返します。
[in] | iIndex | 返される UserContext のユーザー定義インデックスです。 |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
この CallContext の完了時に実行するコールバック関数を設定します。
設定したコールバックはこの CallContext が完了状態に遷移したときに呼び出されます。 このコールバックを使用することで、 CallContext が完了したかどうかを確認するためにポーリングする手間を省くことができます。
本関数を複数回呼び出すことで複数のコールバックを登録することが出来ます。 複数のコールバックを登録した場合はデフォルトでは登録順にコールバックの呼び出しが行われ、最初に登録されたコールバックは最初に呼び出されます。 この順序を変更したい場合は、コールバックを登録する際に bAddToEnd パラメータを設定する必要があります。
コールバック関数内では NEX のブロック関数を呼び出さないようにしてください。
[in] | pfCompletionCallback | 完了時に呼び出されるコールバック関数へのポインタ。 |
[in] | oContext | 呼び出されるコールバック関数へ渡される UserContext 。 |
[in] | bAddToEnd | true(デフォルト)であれば、コールバックはリストの最後に追加されます。falseであればリストの先頭に追加されます。 |
|
inherited |
この CallContext の完了時に実行するコールバックオブジェクトを設定します。
設定したコールバックはこの CallContext が完了状態に遷移したときに呼び出されます。 このコールバックを使用することで、 CallContext が完了したかどうかを確認するためにポーリングする手間を省くことができます。
本関数を複数回呼び出すことで複数のコールバックを登録することが出来ます。 複数のコールバックを登録した場合はデフォルトでは登録順にコールバックの呼び出しが行われ、最初に登録されたコールバックは最初に呼び出されます。 この順序を変更したい場合は、コールバックを登録する際に bAddToEnd パラメータを設定する必要があります。
コールバック関数内では NEX のブロック関数を呼び出さないようにしてください。
[in] | pCallback | 完了時に呼び出されるコールバックオブジェクトへのポインタ。 |
[in] | bCallOnSuccess | 真(デフォルト)であれば、 コールバックは非同期処理の成功時にのみ呼び出されます。 |
[in] | bAddToEnd | true(デフォルト)であれば、コールバックはリストの最後に追加されます。falseであればリストの先頭に追加されます。 |
|
inherited |
CallContext の状態を利用可能に再設定します。
このメソッドは、 State が Sucess 、 Failure または Cancelled のいずれかひとつである場合のみ、呼び出すことができます。
State が CallInProgress のときに本関数が呼び出されると、エラー SYSTEMERROR_GEN_INVALID_OPERATION になります。 State が Available の場合、本関数は true を返しますが、何も起こりません。
|
inherited |
非同期処理が完了する、またはタイムアウトを越えるまで待機します。
本関数は、 CallContext の State が CallInProgress の場合に呼び出すことができます。 非同期処理が完了する、またはタイムアウトを越えるまで処理を戻しません。 CallContext::Wait() とは異なり、本関数内部で Scheduler::Dispatch() は呼び出されません。 内部処理を進めるには他のスレッドで Scheduler::Dispatch() などを呼び出す必要があります。 NEX のスレッドモードがスレッドアンセーフモードであっても、 本関数は Scheduler::Dispatch() を含む任意の他の関数と同時に呼び出すことができます。
タイムアウトを越えた場合でも非同期処理が継続するため、非同期処理のout引数は解放できません。 out引数を解放したい場合は明示的に CallContext::Cancel() を呼び出してください。
[in] | uiTimeout | 待機する最大の時間(ミリ秒)。デフォルトのuiTimeoutは無限大です。 |