nlib
nn::nlib::threading::Promise< R > クラステンプレート

スレッド実行の結果を呼び出しスレッドに対してスレッドセーフに出力するためのクラスです。C++11のstd::promiseに似ています。 [詳解]

#include "nn/nlib/threading/Future.h"

nn::nlib::threading::detail::PromiseBase< Derived >を継承しています。

公開型

typedef Future< R > FutureType
 Future<R>です。
 

公開メンバ関数

errno_t SetValue (const R &value)
 値を設定して、Futureから取り出せる状態にします。 [詳解]
 
errno_t SetError (errno_t e) noexcept
 エラー値を設定します。 [詳解]
 
errno_t GetFuture (Future< R > *p) noexcept
 実行結果を取得するためのFutureを設定します。 [詳解]
 
void swap (Promise &rhs) noexcept
 オブジェクトをスワップします。 [詳解]
 
基本的なメンバ関数
 Promise () noexcept
 デフォルトコンストラクタです。
 
Promiseassign (Promise &rhs, move_tag)
 swapを利用したムーブにより代入します。
 
 Promise (Promise &rhs, move_tag)
 swapを利用したムーブによりオブジェクトを構築します。
 
 Promise (Promise &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
Promiseoperator= (Promise &&rhs)
 ムーブ代入演算子です。C++11の利用時に有効です。
 
errno_t Init () noexcept
 オブジェクトの初期化を行います。 [詳解]
 

詳解

template<class R>
class nn::nlib::threading::Promise< R >

スレッド実行の結果を呼び出しスレッドに対してスレッドセーフに出力するためのクラスです。C++11のstd::promiseに似ています。

テンプレート引数
R出力する値の型。voidを指定することも可能です。
説明
通常は、このクラスを直接利用するよりは、PackagedTaskクラスを利用する方が簡便です。
利用する場合は以下のように利用します。 コピーコンストラクタと代入演算子が定義されていないことに注意してください。
void threadFunc(ThreadArg<Promise<int> >::ArgType& ptr) {
ptr->arg1.SetValue(1);
}
....
ThreadArg<Promise<int> >::ArgType p(new ThreadArg<Promise<int> >());
Future<int> myfuture;
p->arg1.GetFuture(&myfuture);
p->func = threadFunc;
Thread th;
th.Start(p);
th.Join(); // Joinのタイミングは任意。DetachしてもOK
int result = myfuture.Get(); // 結果を取得せずに済ませることも可能(タイムアウト等)

Future.h41 行目に定義があります。

関数詳解

◆ GetFuture()

template<class R>
nn::nlib::threading::Promise< R >::GetFuture ( Future< R > *  p)
inlinenoexcept

実行結果を取得するためのFutureを設定します。

引数
[in]pFutureへのポインタ
戻り値
0成功した場合
EINVALpNULLの場合
ENOMEM値を格納するメモリの確保に失敗した場合

Future.h323 行目に定義があります。

◆ Init()

template<class R>
nn::nlib::threading::Promise< R >::Init ( )
inlinenoexcept

オブジェクトの初期化を行います。

戻り値
0成功した場合
ENOMEMメモリの確保に失敗した場合
EALREADY既に初期化済みの場合

Future.h321 行目に定義があります。

◆ SetError()

template<class R>
nn::nlib::threading::Promise< R >::SetError ( errno_t  e)
inlinenoexcept

エラー値を設定します。

引数
[in]eエラー値
戻り値
0エラー値の設定に成功した場合
EALREADY既にエラー値が設定されている場合
ENOMEMInit()が事前に呼ばれていない場合で、メモリ確保に失敗した場合
説明
0以外のエラー値を設定すると、Future::Get(R* ptr)における戻り値としてエラー値を取得できるようになります。

Future.h322 行目に定義があります。

◆ SetValue()

template<class R>
nn::nlib::threading::Promise< R >::SetValue ( const R &  value)

値を設定して、Futureから取り出せる状態にします。

引数
[in]value設定する値
戻り値
0成功した場合
ENOMEM値を格納するメモリの確保に失敗した場合
EALREADY既に値を設定済みの場合
値の設定はFutureに対してスレッドセーフに行われます。

Future.h342 行目に定義があります。

◆ swap()

template<class R>
nn::nlib::threading::Promise< R >::swap ( Promise< R > &  rhs)
inlinenoexcept

オブジェクトをスワップします。

引数
[in]rhs交換されるオブジェクト

Future.h326 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: