CTR NEX API Reference
nn::nex::ThreadedJob クラス

任意の処理をスレッド化し、それを非同期処理として実行するためのクラスです。 [詳解]

#include <OnlineCore/src/Core/ThreadedJob.h>

+ nn::nex::ThreadedJob の継承関係図

公開メンバ関数

 ThreadedJob ()
 コンストラクタです。
 
virtual ~ThreadedJob ()
 デストラクタです。 [詳解]
 
qInt32 GetThreadCoreNo () const
 Start() で生成されるスレッドが利用する CPU の コア番号を取得します。 [詳解]
 
String GetThreadName () const
 Start() で生成されるスレッドの名前を取得します。 [詳解]
 
qUnsignedInt32 GetThreadPriority () const
 Start() で生成されるスレッドの優先度を取得します。 [詳解]
 
size_t GetThreadStackSize () const
 Start() で生成されるスレッドのスタックサイズを取得します。 [詳解]
 
void SetThreadCoreNo (qInt32 threadCoreNo)
 Start() で生成されるスレッドが利用する CPU の コア番号を設定します。 [詳解]
 
void SetThreadName (String threadName)
 Start() で生成されるスレッドの名前を設定します。 [詳解]
 
void SetThreadPriority (qUnsignedInt32 threadPriority)
 Start() で生成されるスレッドの優先度を設定します。 [詳解]
 
void SetThreadStackSize (size_t threadStackSize)
 Start() で生成されるスレッドのスタックサイズを設定します。 [詳解]
 
template<typename TCallback >
qBool Start (CallContext *pContext, const TCallback &threadedCallback, qBool deleteCallbackAfterCall=false)
 任意の処理をスレッド化し、それを非同期処理として実行します。 [詳解]
 

詳解

任意の処理をスレッド化し、それを非同期処理として実行するためのクラスです。

構築子と解体子

virtual nn::nex::ThreadedJob::~ThreadedJob ( )
virtual

デストラクタです。

関数詳解

template<typename TCallback >
qBool nn::nex::ThreadedJob::Start ( CallContext pContext,
const TCallback &  threadedCallback,
qBool  deleteCallbackAfterCall = false 
)

任意の処理をスレッド化し、それを非同期処理として実行します。

本関数を呼び出すと内部で一つスレッドを生成し、そのスレッドが threadedCallback を呼び出します。 threadedCallback から処理が戻ると非同期処理の完了となり、pContext に結果が格納されます。

threadedCallback には引数が空で返値の型が qResult もしくは qBool となる関数ポインタ、関数オブジェクト、ラムダ式を指定できます。 threadedCallback が返却した qResult 値は pContext->GetOutcome() で取得可能です。 threadedCallback から返却する qResult 値には NEX の各種非同期処理を呼び出した結果である CallContext::GetOutcome() から取得した qResult オブジェクトをそのまま使用したり、qResult(true) もしくは qResult(false) を使うことができます。 アプリケーション定義のエラーを返却したい場合は QRESULT_ERROR(<qResultFacility::FirstUserFacility 以降の値>, <0 ~ 0xFFFF>) を使用できます。 threadedCallback の返値の型が qBool の場合は、true を返却すると QSUCCESS(Core, Success)が、 false を返却すると QERROR(Core, Unknown) がそれぞれ pContext->GetOutcome() から返却されます。

関数オブジェクトを渡す場合は値もしくは参照型で渡す方法とポインタ型で渡す方法の二種類があり、それぞれ挙動が異なります。 値もしくは参照型で渡した場合は内部で関数オブジェクトがコピーもしくはムーブされ、コールバックはそのコピーもしくはムーブされたオブジェクトに対して行われます。 そのため、本関数呼び出し後は指定したオブジェクトを即座に破棄する事ができます。 ポインタ型で渡した場合は、コールバックはそのポインタが指すオブジェクトに対して行われます。 そのため、コールバックが呼び出されるまでその関数オブジェクトを呼び出し側で保持しておく必要があります。

threadedCallback に関数オブジェクトをポインタで渡した場合は deleteCallbackAfterCall を true にする事で threadedCallback の呼び出し後に自動的に threadedCallback を delete することができます。

すでに実行した非同期処理が完了したかどうかにかかわらず、一つの ThreadedJob オブジェクトを使って何度でも本関数を呼び出すことが出来ます。 非同期処理完了前に ThreadedJob オブジェクトを破棄しても問題ありません。

本関数呼び出し後に CallContext::Cancel() を呼び出す場合は、事前に起動したスレッドから呼び出された threadedCallback の処理が完了している必要があります。 threadedCallback の処理が完了していない場合は、完了するまで Scheduler::Dispatch() 内でブロックが発生します。

NEX の関数を複数のスレッドで並列に呼び出す場合は NEX のスレッドモードがスレッドセーフである必要があることに注意してください。

引数
[in,out]pContext非同期処理の実行状況を管理するためのオブジェクトです。
[in]threadedCallback生成したスレッドから呼び出されるコールバック。
[in]deleteCallbackAfterCallthreadedCallback の実行が完了した後自動的に threadedCallback を delete するかどうか。
戻り値
非同期処理の開始に成功したかどうか。pContext が CallContext::CallInProgress の場合のみ開始に失敗し false を返します。
void nn::nex::ThreadedJob::SetThreadPriority ( qUnsignedInt32  threadPriority)

Start() で生成されるスレッドの優先度を設定します。

引数
[in]threadPriorityスレッド優先度。
qUnsignedInt32 nn::nex::ThreadedJob::GetThreadPriority ( ) const

Start() で生成されるスレッドの優先度を取得します。

戻り値
スレッド優先度。
void nn::nex::ThreadedJob::SetThreadCoreNo ( qInt32  threadCoreNo)

Start() で生成されるスレッドが利用する CPU の コア番号を設定します。

ObjectThreadRoot::DEFAULT_CORE_NO が、デフォルト値です。 CTR では、デフォルト値を使用した場合は CORE_NO_USE_PROCESS_VALUE が設定されます。

SDK 3.0 以降の CTR では、1 を指定することによりシステムコアを選択できます。 システムコアの利用の際には、nn::os::CTR::SetApplicationCpuTimeLimit() で、CPU時間を割り当てる必要があります。 システムコアの利用は、動作保証外です。

引数
[in]threadCoreNoCPU コア番号
qInt32 nn::nex::ThreadedJob::GetThreadCoreNo ( ) const

Start() で生成されるスレッドが利用する CPU の コア番号を取得します。

戻り値
CPU コア番号
void nn::nex::ThreadedJob::SetThreadStackSize ( size_t  threadStackSize)

Start() で生成されるスレッドのスタックサイズを設定します。

引数
[in]threadStackSizeスレッドのスタックサイズ。
size_t nn::nex::ThreadedJob::GetThreadStackSize ( ) const

Start() で生成されるスレッドのスタックサイズを取得します。

戻り値
スレッドのスタックサイズ。
void nn::nex::ThreadedJob::SetThreadName ( String  threadName)

Start() で生成されるスレッドの名前を設定します。

引数
[in]threadNameスレッド名。
String nn::nex::ThreadedJob::GetThreadName ( ) const

Start() で生成されるスレッドの名前を取得します。

戻り値
スレッド名。