クラス Sapie::CAsyncRequestHelper

非同期要求補助クラス [詳細]

#include <AsyncRequestHelper.h>

Sapie::CAsyncRequestHelperに対する継承グラフ

Sapie::CControllerBase

Public メソッド

 CAsyncRequestHelper ()
 コンストラクタ
virtual ~CAsyncRequestHelper ()
 デストラクタ
long SyncRequestImpl (CControllerBase *pCtrl, boost::function< long()> func)
 非同期要求の同期化の実装
void SetTimeout (long lTimeout)
 実行開始タイムアウト時間設定
非同期要求の同期化
template<class TC>
long SyncRequest (TC *t, long(TC::*f)())
 非同期要求の同期化
template<class TC, class T1>
long SyncRequest (TC *t, long(TC::*f)(T1), T1 a1)
template<class TC, class T1, class T2>
long SyncRequest (TC *t, long(TC::*f)(T1, T2), T1 a1, T2 a2)
template<class TC, class T1, class T2, class T3>
long SyncRequest (TC *t, long(TC::*f)(T1, T2, T3), T1 a1, T2 a2, T3 a3)
template<class TC, class T1, class T2, class T3, class T4>
long SyncRequest (TC *t, long(TC::*f)(T1, T2, T3, T4), T1 a1, T2 a2, T3 a3, T4 a4)
template<class TC, class T1, class T2, class T3, class T4, class T5>
long SyncRequest (TC *t, long(TC::*f)(T1, T2, T3, T4), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
template<class TC, class T1, class T2, class T3, class T4, class T5, class T6>
long SyncRequest (TC *t, long(TC::*f)(T1, T2, T3, T4), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
template<class TC, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
long SyncRequest (TC *t, long(TC::*f)(T1, T2, T3, T4), T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7)
template<class TC, class TF, class T1>
long SyncRequest (TC *t, TF f, T1 a1)
template<class TC, class TF, class T1, class T2>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2)
template<class TC, class TF, class T1, class T2, class T3>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2, T3 a3)
template<class TC, class TF, class T1, class T2, class T3, class T4>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2, T3 a3, T4 a4)
template<class TC, class TF, class T1, class T2, class T3, class T4, class T5>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
template<class TC, class TF, class T1, class T2, class T3, class T4, class T5, class T6>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
template<class TC, class TF, class T1, class T2, class T3, class T4, class T5, class T6, class T7>
long SyncRequest (TC *t, TF f, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7)

説明

非同期要求補助クラス

SapieAPIを利用する際に、よくある手続きを集めた補助クラス。 CSerializeEventDispatcherを利用している制御クラスが対象である。


関数

template<class TC>
long Sapie::CAsyncRequestHelper::SyncRequest ( TC *  t,
long(TC::*)()  f 
) [inline]

非同期要求の同期化

非同期要求の同期化関数は以下の形式である。

 template <class TC, class T1, ...>
 long SyncRequest(TC* t, long (TC::* f)( T1, ... ), T1, ...)

引数:
[in] t tは制御クラスのポインタである。 CControllerBase を継承したクラスのポインタでなければならない。
[in] f fは実行したい非同期要求メソッドの関数ポインタである。
[in] ... 第3引数以降は、非同期要求メソッドに渡す引数である。
戻り値:
[in] 正常終了時は0。それ以外の場合は、エラーコード。
例えば、 CSpeakController::SpeakText をコールする場合は以下のとおりとなる。

 CAsyncRequestHelper cRequest;
 cRequest.SyncRequest(&cSpeak, &CSpeakController::SpeakText, std::string("こんにちは"));

非同期要求メソッドがオーバーライドされている場合など、上記の記法ではエラーとなる場合があるため、 その場合は以下のように関数ポインタをキャストする。

 CAsyncRequestHelper cRequest;
 cRequest.SyncRequest(&cSpeak, static_cast<long (CSpeakController::*)(std::string)>(&CSpeakController::SpeakText), std::string("こんにちは") );

覚え書き:
本メソッドを利用することにより、非同期要求を同期化して利用できる。 一般的に、通常非同期要求は、それによって開始される処理が時間がかかる処理であっても、 要求受付が完了した時点でメソッドは抜け、アプリケーション側に処理が返される。 例えば以下の処理では、 CSpeakController::SpeakText は、発話を始めた時点で 抜け、次の CSerializeEventDispatcher::Sync によって発話完了を待つことになる。
 CSpeakController cSpeak;
 CSerializeEventDispatcher evDispatcher;
 
 ...
 
 long reqno = cSpeak.SpeakText("こんにちは。");
 evDispatcher.Sync(reqno);

また、CSpeakControllerSpeakText が何らかの原因でエラーとなる場合に、 エラーとならないタイミングまで待機するといった処理も通常行われる。 SyncRequest() はこれらの処理をラッピングする関数である。 非同期要求が受け付けられるまでの待機、および完了するまでの待機を行うことができる。

long Sapie::CAsyncRequestHelper::SyncRequestImpl ( CControllerBase pCtrl,
boost::function< long()>  func 
)

非同期要求の同期化の実装

非同期要求の同期化機能を提供する関数の実装である。 通常は本メソッドを直接コールするのではなく、 SyncRequest() を利用すること。

引数:
[in] pCtrl 対象非同期要求が属する制御クラスのポインタ
[in] func 対象の非同期要求をコールするための関数オブジェクト

void Sapie::CAsyncRequestHelper::SetTimeout ( long  lTimeout  ) 

実行開始タイムアウト時間設定

SyncRequest() において、コールする非同期要求メソッドがエラーを返す場合、 指定した時間内において、実行可能状態になるまで待機する。

0を指定した場合には、待機を行わない。

引数:
[in] lTimeout タイムアウト時間(ms)


このクラスの説明は次のファイルから生成されました:

SAPIに対してFri Aug 2 21:58:33 2013に生成されました。  doxygen 1.5.5