#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) |
1.5.5