システムを動作させるスレッドモードを設定するためのクラスです。 また、NgsFacade や NetZ の廃棄モードの設定も行います。 [詳解]
#include <OnlineCore/src/Core/Core.h>
公開型 | |
enum | ThreadMode { ThreadModeUndefined, ThreadModeSafeTransportBuffer, ThreadModeUnsafeTransportBuffer, ThreadModeUnsafeUser, ThreadModeInternal, ThreadModeInternalTransportBuffer } |
スレッドモードを表す列挙体です。Core::SetThreadMode() の引数に用いられます。 [詳解] | |
公開メンバ関数 | |
RefCountedObject * | AcquireRef () |
参照カウントを 1 増加させます。 | |
qBool | GetTerminateImmediately () |
強制終了モードが設定されているかどうかを取得します。 [詳解] | |
void | ReleaseRef () |
参照カウントを 1 減少させます。0 になるときに自分自身を delete します。 | |
void | SetTerminateImmediately (qBool bTerminate) |
強制終了モードを設定します。 [詳解] | |
静的公開メンバ関数 | |
static Core * | GetInstance () |
Coreインスタンスへのポインタを返します。 [詳解] | |
static qInt32 | GetInternalThreadCoreNo () |
インターナルスレッドが利用する CPU の コア番号を取得します。 [詳解] | |
static qUnsignedInt | GetInternalThreadPriority () |
インターナルスレッドの優先度を取得します。 [詳解] | |
static ThreadMode | GetThreadMode () |
現在設定しているスレッドモードを取得します。 [詳解] | |
static size_t | GetThreadStackSize () |
スレッドスタックのサイズを取得します。 [詳解] | |
static qBool | IsThreadSafe () |
NEX がスレッドセーフに設定されているかどうかを取得します。 [詳解] | |
static qBool | IsUsingInternalThread () |
インターナルスレッドが有効かどうかを取得します。 [詳解] | |
static qBool | IsUsingThreadAutoStack () |
スレッドのスタックメモリに AutoStack を使用するかどうかを取得します。デフォルト値は、falseです。 [詳解] | |
static qBool | IsUsingTransportBufferThread () |
トランスポートバッファスレッドが有効かどうかを取得します。 [詳解] | |
static void | SetInternalThreadCoreNo (qInt32 no) |
インターナルスレッドが利用する CPU の コア番号を設定します。 [詳解] | |
static void | SetInternalThreadPriority (qUnsignedInt priority) |
インターナルスレッドの優先度を設定します。 [詳解] | |
static void | SetThreadMode (ThreadMode threadMode) |
NEXのスレッドモードを設定します。 [詳解] | |
static void | SetThreadStackSize (size_t uiThreadSize) |
スレッドスタックのサイズを設定します。 [詳解] | |
static void | UseThreadAutoStack (qBool usingAutoStack=true) |
スレッドのスタックメモリに AutoStack を使用するかどうかを設定します。 [詳解] | |
システムを動作させるスレッドモードを設定するためのクラスです。 また、NgsFacade や NetZ の廃棄モードの設定も行います。
このクラスは NgsFacade もしくは VSocket もしくは NetZ もしくは MatchmakeExtensionClient などの 各種クライアントオブジェクトが生成されたタイミングでインスタンスが作成され、全て破棄されたタイミングで Core オブジェクトは破棄されます。
Core を生成する前に Core::SetThreadMode() でスレッドモードを設定してください。
スレッドモードを表す列挙体です。Core::SetThreadMode() の引数に用いられます。
Core::ThreadModeUndefined 以外を設定する必要があります。
列挙値 | |
---|---|
ThreadModeUndefined |
初期値です。 Core::ThreadModeInternal と同じ動作となります。 |
ThreadModeSafeTransportBuffer |
スレッドセーフトランスポートバッファスレッドモードに設定します。 送受信処理をライブラリ内部のトランスポートバッファスレッドで行うことでディスパッチ処理のブロック時間(送受信時の長いブロック時間)が改善されます。 ライブラリ内での排他が有効となり、一部の API を除きスレッドセーフとなります。詳しくはNEXプログラミングマニュアルの初期化設定(スレッドモデル、排他制御)を参照してください。 Scheduler::Dispatch() をアプリケーション側で定期的に実行する必要があります。 このスレッドモードを指定した場合は Socket::Initialize の maxSessions を 4 にする必要があります。 また、それに応じてSocketのバッファ領域も増やす必要があります。 |
ThreadModeUnsafeTransportBuffer |
スレッドアンセーフトランスポートバッファスレッドモードに設定します。 送受信処理をライブラリ内部のトランスポートバッファスレッドで行うことでディスパッチ処理のブロック時間(送受信時の長いブロック時間)が改善されます。 ライブラリ内での排他が一部を除いて無効となり、処理速度が向上します。 排他が行われないため、すべての NEX の API を同一スレッドから使用するか、アプリケーション側で適切に排他処理を行ってください。 Scheduler::Dispatch() をアプリケーション側で定期的に実行する必要があります。 処理速度、ブロック時間共に、優れているスレッドモードです。 このスレッドモードを指定した場合は Socket::Initialize の maxSessionsを 4 にする必要があります。 また、それに応じて Socket のバッファ領域も増やす必要があります。 |
ThreadModeUnsafeUser |
スレッドアンセーフユーザースレッドモードに設定します。 ディスパッチ処理、通信処理共にユーザーのスレッドで行われることになります。 ライブラリ内での排他が無効となり、処理速度が向上します。 排他が行われないため、すべての NEX の API を同一スレッドから使用するか、アプリケーション側で適切に排他処理を行ってください。 Scheduler::Dispatch() をアプリケーション側で定期的に実行する必要があります。 処理速度の点で優れているスレッドモードです。 ただし、ソケット処理で数 msec ブロックする可能性があるので、メインスレッドとは別スレッドから NEX の API を呼び出してください。 |
ThreadModeInternal |
インターナルスレッドモードに設定します。 ディスパッチ処理、通信処理共にライブラリ内部のスレッドで自動的に行われます。 ライブラリ内での排他が有効となり、一部の API を除きスレッドセーフとなります。 アプリケーションが NEX の API を呼び出すタイミングによってはその API 呼び出しが長時間ブロックする可能性があります。 これを避けるには Core::ThreadModeInternalTransportBuffer を使用してください。 |
ThreadModeInternalTransportBuffer |
インターナルトランスポートバッファスレッドモードに設定します。 ディスパッチ処理、通信処理共にライブラリ内部のスレッドで自動的に行われます。 ライブラリ内での排他が有効となり、一部の API を除きスレッドセーフとなります。 送受信処理をライブラリ内部のトランスポートバッファスレッドで行うことで内部のディスパッチ処理のブロック時間(送受信時の長いブロック時間)が改善されます。 その結果、Scheduler::SystemLock() を内部で確保する時間が減少し、アプリケーションが NEX の各種 API を呼び出した際のブロック時間が減少します。 このスレッドモードを指定した場合は Socket::Initialize の maxSessionsを 4 にする必要があります。 また、それに応じて Socket のバッファ領域も増やす必要があります。 |
|
static |
Coreインスタンスへのポインタを返します。
Coreオブジェクトを操作するためには、この関数が返す参照を使用して下さい。
void nn::nex::Core::SetTerminateImmediately | ( | qBool | bTerminate | ) |
強制終了モードを設定します。
ライブラリ内部の状態やネットワークの状態によっては、 NEXの終了時に NgsFacade::Terminate() や NgsFacade のデストラクタが長時間ブロックしてしまうことがあります。 強制終了モードに設定することで、これらの処理時間を減らすことができます。 NetZ::SetTerminateImmediately()をtrueにした場合の処理も行い、全体的に終了処理が早くなります。 通常の切断処理が行われないため、通信相手にはキープアライブのタイムアウトが発生してこちらのステーションがネットワークから切断されたように見える場合があります。 そのため、通常の終了シーケンスで設定することは控えてください。 また、サーバーと通信するAPIは全て失敗します。 AC によるネットワーク切断時に、自動的に強制終了モードを設定します。
nn::nex::Core::GetInstance()->SetTerminateImmediately()とすることで設定可能です。
この関数は、シャットダウン/スリープ時やネットワークに繋がっていない場合に、NEX全体を破棄するときに利用可能です。 NetZのみの終了の高速化は、NetZ::SetTerminateImmediately() を実行してください。
初期値は通常終了モードです。 本設定は、Coreインスタンス毎に保持されます。 ゲームサーバーへのログイン時に、通常終了モードへ設定されます。
[in] | bTerminate | trueを指定するとき、強制終了モードになります。 falseを指定するとき、通常モードに戻ります。 |
qBool nn::nex::Core::GetTerminateImmediately | ( | ) |
強制終了モードが設定されているかどうかを取得します。
nn::nex::Core::GetInstance()->GetTerminateImmediately()とすることで参照可能です。
true 強制終了モードの場合に返ります。
false 通常モードの場合に返ります。
|
static |
インターナルスレッドが有効かどうかを取得します。
インターナルスレッドとは NEX の内部処理を行うスレッドです。 Core::SetThreadMode() に Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NEX の Core オブジェクトを生成した後から本関数を使用できます。
|
static |
NEXのスレッドモードを設定します。
NEX を初期化する前 (Initialize() などを呼び出す前) に、 本関数でスレッドモードを設定してください。
[in] | threadMode | ThreadMode 型の列挙子です。 |
|
static |
現在設定しているスレッドモードを取得します。
|
static |
トランスポートバッファスレッドが有効かどうかを取得します。
トランスポートバッファスレッドとは送受信処理を行うスレッドです。 Core::SetThreadMode() に Core::ThreadModeUnsafeTransportBuffer, Core::ThreadModeSafeTransportBuffer, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NEX の Core オブジェクトを生成した後から本関数を使用できます。
|
static |
スレッドのスタックメモリに AutoStack を使用するかどうかを取得します。デフォルト値は、falseです。
true AutoStack を使用します。
false AutoStack を使用しません。
|
static |
スレッドのスタックメモリに AutoStack を使用するかどうかを設定します。
[in] | usingAutoStack | AutoStack を使用するなら true。 デフォルトは、false。 |
AutoStack を使用する場合、システムは nn::os::Thread::TryStartUsingAutoStack() でスレッドを実行します。
使用しない場合、システムは nn::os::Thread::TryStart() でスレッドを実行します。
|
static |
NEX がスレッドセーフに設定されているかどうかを取得します。
Core::SetThreadMode() に Core::ThreadModeSafeTransportBuffer, Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NEX の Core オブジェクトを生成した後から本関数を使用できます。
true スレッドセーフのときに返ります。
false スレッドアンセーフのときに返ります。
|
static |
インターナルスレッドの優先度を設定します。
スレッドモードに Core::ThreadModeInternal もしくは Core::ThreadModeInternalTransportBuffer を指定した場合に NEX 内部で生成されるインターナルスレッドの優先度を設定します。 NEX の Core オブジェクトを生成する前に設定する必要があります。
[in] | priority | スレッド優先度。 |
|
static |
インターナルスレッドの優先度を取得します。
|
static |
インターナルスレッドが利用する CPU の コア番号を設定します。
ObjectThreadRoot::DEFAULT_CORE_NO が、デフォルト値です。 CTR では、デフォルト値を使用した場合は CORE_NO_USE_PROCESS_VALUE が設定されます。
SDK 3.0 以降の CTR では、1 を指定することによりシステムコアを選択できます。 システムコアの利用の際には、nn::os::CTR::SetApplicationCpuTimeLimit() で、CPU時間を割り当てる必要があります。 システムコアの利用は、動作保証外です。
[in] | no | CPU コア番号 |
|
static |
インターナルスレッドが利用する CPU の コア番号を取得します。
|
static |
スレッドスタックのサイズを設定します。
NEX で内部的に作成されるスレッドのスタックサイズを設定します。 デフォルト値で動作するように設定されているため、変更する必要はありません。
[in] | uiThreadSize | スレッドスタックのサイズ。 |
|
static |
スレッドスタックのサイズを取得します。
CTRでは、スタックバッファを4096バイトアライメントに揃える必要があるため、 実際には本関数で取得した値+4095バイトのメモリを確保しています。