主にNEXライブラリのエラーを扱うクラスです。 [詳解]
#include <OnlineCore/src/Platform/Core/SystemError.h>
静的公開メンバ関数 | |
static void | ClearLast () |
SystemErrorクラスに保管されていたエラーを削除します。 [詳解] | |
static void | EraseErrorElements (void) |
このAPIを呼び出したスレッドに対応するエラー情報をSystemErrorクラスから除去します。 [詳解] | |
static void | GetErrorString (qUnsignedInt32 uiErrorCode, qChar *szStringBuf, qUnsignedInt uiBufSize) |
エラーの文字列表現を得ます。 [詳解] | |
static qUnsignedInt32 | GetLast () |
NEX API呼び出しによって発生したエラーを取得します。 [詳解] | |
static qUnsignedInt32 | GetLastExt () |
NEX API呼び出しによって発生したシステムエラーを取得します。 [詳解] | |
主にNEXライブラリのエラーを扱うクラスです。
NEX APIを呼び出した後に、明示的に GetLast() を呼び出すことでエラーの内容が 取得できるように設計された NEX API は、通常3種類に分類されます。返値がbool型の関数、 返値がポインタ型の関数、IsValid()の3種類です。
IsValid()は、ユーザーによって直接呼び出され、障害が発生する可能性のあるコンストラクタが 関連クラスを正常にインスタンス化したかどうかを確認するために使用されます。
エラーが発生すると、IsValid()と bool型の関数はfalse、つまり 0 を返し、ポインタ型の関数は NULL ポインタを返します。
このような NEX API を呼び出している間にエラーが発生すると、そのエラー情報がSystemError クラスに保管されます。は、保管された最新のエラーを返します。
システムエラーなど、エラーが NEXの外で発生した場合、GetLastExt() は 発生した最新エラーのシステムエラーコードを返します。
ClearLast() は、保管されているエラーを削除します。NEX APIを呼び出す前に ClearLast() を呼び出しておくことで、返されたエラーが最後に呼び出した NEX APIで生成されたものであることを保証できます。
また、GetErrorString() を使用してエラーの文字列表現を取得することもできます。
|
static |
エラーの文字列表現を得ます。
[in] | uiErrorCode | GetLast()で取得できるエラー。 |
[out] | szStringBuf | エラーの文字列表現(null終端)が格納されます。 |
[in] | uiBufSize | szStringBufにコピーされるキャラクタの最大値(NUL文字含む)を与えます。 |
|
static |
SystemErrorクラスに保管されていたエラーを削除します。
NEX APIを呼び出す前にこの関数を呼び出しておくことで、返されたエラーが 最後に呼び出されたNEX APIで生成されていることを保証できます。
エラーはスレッド毎に保管されており、この関数呼び出しによって 削除できるエラーは、同じスレッドのものに限定されます。
|
static |
NEX API呼び出しによって発生したエラーを取得します。
SystemErrorクラスが保管している、最新のエラーを返します。 エラーはスレッド毎に保管されており、この関数呼び出しによって 取得できるエラーは、同じスレッドのものに限定されます。
|
static |
|
static |
このAPIを呼び出したスレッドに対応するエラー情報をSystemErrorクラスから除去します。
アプリケーションプログラム側でスレッドを作成し、そのスレッドが NEX APIを呼び出している場合は、そのスレッドが終了する直前の タイミングで、そのスレッドの中からこのAPIを呼び出して下さい。
NEXでは、エラー情報はスレッドごと(より正確には、スレッドIDごと)に 記録されます。そのため、NEX APIを呼び出すスレッドを頻繁に生成/破棄 するような状況では、作成したスレッドの数だけエラー情報を記録するメモリ領域が 確保されていくため、最終的にはメモリリークによるメモリ枯渇でクラッシュします。 本APIは、このような事態を避けるために用意されています。
もし nn::nex::ObjectThread を用いてスレッドを実行しているのであれば、 このAPIを呼び出す必要はありません。同等の処理が nn::nex::ObjectThreadRoot で 行われるようになっているためです。