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

システムを動作させるスレッドモードを設定するためのクラスです。 また、NgsFacade の廃棄モードの設定も行います。 [詳解]

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

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

公開型

enum  ThreadMode {
  ThreadModeUndefined,
  ThreadModeSafeTransportBuffer,
  ThreadModeUnsafeTransportBuffer,
  ThreadModeUnsafeUser,
  ThreadModeInternal,
  ThreadModeInternalTransportBuffer
}
 スレッドモードを表す列挙体です。Core::SetThreadMode() の引数に用いられます。 [詳解]
 

公開メンバ関数

RefCountedObjectAcquireRef ()
 参照カウントを 1 増加させます。
 
qBool GetTerminateImmediately ()
 強制終了モードが設定されているかどうかを取得します。 [詳解]
 
void ReleaseRef ()
 参照カウントを 1 減少させます。0 になるときに自分自身を delete します。
 
void SetTerminateImmediately (qBool bTerminate)
 強制終了モードを設定します。 [詳解]
 

静的公開メンバ関数

static CoreGetInstance ()
 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 の廃棄モードの設定も行います。

このクラスは NgsFacade もしくは VSocket もしくは NetZ もしくは MatchmakeExtensionClient などの 各種クライアントオブジェクトが生成されたタイミングでインスタンスが作成され、全て破棄されたタイミングで Core オブジェクトは破棄されます。

Core を生成する前に Core::SetThreadMode() でスレッドモードを設定してください。

参照
NgsFacade, NetZ

列挙型メンバ詳解

スレッドモードを表す列挙体です。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* nn::nex::Core::GetInstance ( )
static

Coreインスタンスへのポインタを返します。

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]bTerminatetrueを指定するとき、強制終了モードになります。 falseを指定するとき、通常モードに戻ります。
参照
NetZ::SetTerminateImmediately
qBool nn::nex::Core::GetTerminateImmediately ( )

強制終了モードが設定されているかどうかを取得します。

nn::nex::Core::GetInstance()->GetTerminateImmediately()とすることで参照可能です。


戻り値一覧:

true 強制終了モードの場合に返ります。

false 通常モードの場合に返ります。

static qBool nn::nex::Core::IsUsingInternalThread ( )
static

インターナルスレッドが有効かどうかを取得します。

インターナルスレッドとは NEX の内部処理を行うスレッドです。 Core::SetThreadMode()Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NetZ もしくは NgsFacade オブジェクトを生成した後から本関数を使用できます。

戻り値
true インターナルスレッドが有効かどうか
参照
SetThreadMode
static void nn::nex::Core::SetThreadMode ( ThreadMode  threadMode)
static

NEXのスレッドモードを設定します。

NEX を初期化する前 (Initialize() などを呼び出す前) に、 本関数でスレッドモードを設定してください。

引数
[in]threadModeThreadMode 型の列挙子です。
static ThreadMode nn::nex::Core::GetThreadMode ( )
static

現在設定しているスレッドモードを取得します。

戻り値
現在設定しているスレッドモードが返ります。 ThreadMode 列挙体で定義される値のうちのいずれかになります。
static qBool nn::nex::Core::IsUsingTransportBufferThread ( )
static

トランスポートバッファスレッドが有効かどうかを取得します。

トランスポートバッファスレッドとは送受信処理を行うスレッドです。 Core::SetThreadMode()Core::ThreadModeUnsafeTransportBuffer, Core::ThreadModeSafeTransportBuffer, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NetZ もしくは NgsFacade オブジェクトを生成した後から本関数を使用できます。

戻り値
true トランスポートバッファスレッドが有効かどうか
参照
SetThreadMode
static qBool nn::nex::Core::IsUsingThreadAutoStack ( )
static

スレッドのスタックメモリに AutoStack を使用するかどうかを取得します。デフォルト値は、falseです。


戻り値一覧:

true AutoStack を使用します。

false AutoStack を使用しません。

参照
UseThreadAutoStack()
static void nn::nex::Core::UseThreadAutoStack ( qBool  usingAutoStack = true)
static

スレッドのスタックメモリに AutoStack を使用するかどうかを設定します。

引数
[in]usingAutoStackAutoStack を使用するなら true。 デフォルトは、false。

AutoStack を使用する場合、システムは nn::os::Thread::TryStartUsingAutoStack() でスレッドを実行します。
使用しない場合、システムは nn::os::Thread::TryStart() でスレッドを実行します。

参照
UseThreadAutoStack()
static qBool nn::nex::Core::IsThreadSafe ( )
static

NEX がスレッドセーフに設定されているかどうかを取得します。

Core::SetThreadMode()Core::ThreadModeSafeTransportBuffer, Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer を設定した場合に本関数は true を返します。 NetZ もしくは NgsFacade オブジェクトを生成した後から本関数を使用できます。


戻り値一覧:

true スレッドセーフのときに返ります。

false スレッドアンセーフのときに返ります。

static void nn::nex::Core::SetInternalThreadPriority ( qUnsignedInt  priority)
static

インターナルスレッドの優先度を設定します。

スレッドモードに Core::ThreadModeInternal もしくは Core::ThreadModeInternalTransportBuffer を指定した場合に NEX 内部で生成されるインターナルスレッドの優先度を設定します。 NetZNgsFacade オブジェクトを生成する前に設定する必要があります。

引数
[in]priorityスレッド優先度。
参照
Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer
static qUnsignedInt nn::nex::Core::GetInternalThreadPriority ( )
static

インターナルスレッドの優先度を取得します。

戻り値
スレッド優先度。
参照
Core::ThreadModeInternal, Core::ThreadModeInternalTransportBuffer
static void nn::nex::Core::SetInternalThreadCoreNo ( qInt32  no)
static

インターナルスレッドが利用する CPU の コア番号を設定します。

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

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

引数
[in]noCPU コア番号
static qInt32 nn::nex::Core::GetInternalThreadCoreNo ( )
static

インターナルスレッドが利用する CPU の コア番号を取得します。

戻り値
CPU コア番号
static void nn::nex::Core::SetThreadStackSize ( size_t  uiThreadSize)
static

スレッドスタックのサイズを設定します。

NEX で内部的に作成されるスレッドのスタックサイズを設定します。 デフォルト値で動作するように設定されているため、変更する必要はありません。

引数
[in]uiThreadSizeスレッドスタックのサイズ。
static size_t nn::nex::Core::GetThreadStackSize ( )
static

スレッドスタックのサイズを取得します。

CTRでは、スタックバッファを4096バイトアライメントに揃える必要があるため、 実際には本関数で取得した値+4095バイトのメモリを確保しています。

戻り値
スレッドスタックのサイズ。