#include <AsyncRequestHelper.h>
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を利用している制御クラスが対象である。
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引数以降は、非同期要求メソッドに渡す引数である。 |
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 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) |