任意の処理をスレッド化し、それを非同期処理として実行するためのクラスです。 [詳解]
#include <OnlineCore/src/Core/ThreadedJob.h>
公開メンバ関数 | |
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 |
デストラクタです。
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] | deleteCallbackAfterCall | threadedCallback の実行が完了した後自動的に threadedCallback を delete するかどうか。 |
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] | threadCoreNo | CPU コア番号 |
qInt32 nn::nex::ThreadedJob::GetThreadCoreNo | ( | ) | const |
Start() で生成されるスレッドが利用する 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 | スレッド名。 |