TNB Library
クラス | 公開メンバ関数 | 全メンバ一覧
CSharedStructT< TYP > クラステンプレート

共有構造体管理テンプレート [詳解]

#include <TnbSharedMemory.h>

+ CSharedStructT< TYP > の継承関係図

クラス

struct  IListener
 共有構造体管理のリスナーインターフェース [詳解]
 

公開メンバ関数

void Close (IListener *piListener=NULL)
 [操作] クローズ [詳解]
 
 CSharedStructT (bool boCanClose=true)
 コンストラクタ [詳解]
 
bool HasMemory (void) const
 [確認] 共有メモリの有無 [詳解]
 
bool Open (LPCTSTR lpMemName=NULL, IListener *piListener=NULL)
 [操作] オープン [詳解]
 
 operator const TYP * (void) const
 [取得] メモリの参照. [詳解]
 
 operator TYP * (void)
 [取得] メモリの参照. [詳解]
 
TYP * operator-> (void)
 [取得] メモリの参照. [詳解]
 
const TYP * operator-> (void) const
 [取得] メモリの参照. [詳解]
 
virtual ~CSharedStructT (void)
 デストラクタ [詳解]
 

詳解

template<typename TYP>
class TNB::CSharedStructT< TYP >

共有構造体管理テンプレート

一つの指定の構造体型の共有メモリを保持します。

オープン時リスナー( IListener )を指定することで、初めてのオープンの時だけ
共有メモリの初期化ができます。

Openしたインスタンスは指定した型のポインタとして操作が可能です。
覚え書き
共有メモリにおくので、コンストラクタが動かなくても問題のない型を 指定してください。
引数
TYP共有メモリにおく構造体( 'operator→' を使っているので intなどは使えません)
使用例

    struct ISM : CSharedMemoryT<Bool>::IListener
    {
        virtual void OnAction(Bool* P)
        {
            *P = false;
        }
    } ism;
    CSharedMemoryT<Bool> ll1;
    CSharedMemoryT<Bool> ll2;
    ll1.Open( _T("AAA"), &ism );
    ll2.Open( _T("AAA"), &ism ); //同じ共有メモリ名なのでリスナーは呼ばれない
    ASSERT( ll2->IsFalse() ); //(TYPのポインタと同じ記述が可能)
    (*ll1) = true;
    ASSERT( ll2->IsTrue() ); //同じメモリを指しているので影響がある
 
必要ファイル
TnbSharedMemory.h
日付
06/01/01 新規作成
06/04/20 リスナー追加
06/04/26 テンプレート名変更。最後の一つは消さないオプション追加。
06/09/12 constを考慮。

TnbSharedMemory.h214 行目に定義があります。

構築子と解体子

◆ CSharedStructT()

CSharedStructT ( bool  boCanClose = true)
explicit

コンストラクタ

覚え書き
この段階では共有メモリは保持していません。
重要:
共有メモリは、すべての参照がクローズされると、破棄されます。 しかし、boCanClose にfalseを指定しておくと、本クラスで一度オープンした 共有メモリは、プロセスが終了するまでクローズされなくなります。
システムとしてグローバルに情報を保持し続ける必要がある場合に、 このオプションを使用するか、本インスタンスの一つをグローバルに 持ち続けてください。
引数
boCanClosefalse ならクローズ時共有メモリを閉じない。trueか省略なら閉じる。

TnbSharedMemory.h261 行目に定義があります。

◆ ~CSharedStructT()

virtual ~CSharedStructT ( void  )
virtual

デストラクタ

TnbSharedMemory.h268 行目に定義があります。

関数詳解

◆ Close()

void Close ( IListener piListener = NULL)

[操作] クローズ

引数
piListenerリスナー。省略可能。指定すると破棄直前にOnActionがコールされます。 ただし、コンストラクタで boCanClose に false を指定していると、最後の クローズはしないので、OnAction()は絶対コールされません。

TnbSharedMemory.h373 行目に定義があります。

◆ HasMemory()

bool HasMemory ( void  ) const

[確認] 共有メモリの有無

戻り値
true持っている
false持っていない(Openしていない)

TnbSharedMemory.h278 行目に定義があります。

◆ Open()

bool Open ( LPCTSTR  lpMemName = NULL,
IListener piListener = NULL 
)

[操作] オープン

覚え書き
最初にオープンするとリスナーがコールされます。リスナー実行中は、 二つ目以降のオープンはブロックされます。そのため、リスナーによる初期化は 保障されます。
本クラスですでにオープンしていたらCloseしてからオープンします。
引数
lpMemName共有メモリ名。 省略するとインスタンス内のみ有効な共有メモリになります。 他のTYPと同じ名前にならないようにしてください。
piListenerリスナー。省略可能。指定すると初めてOpenした時に OnAction がコールされます。
戻り値
true成功
false失敗

TnbSharedMemory.h336 行目に定義があります。

◆ operator const TYP *()

operator const TYP * ( void  ) const

[取得] メモリの参照.

覚え書き
OpenしていないとNULLが返ります。
戻り値
アドレス

TnbSharedMemory.h298 行目に定義があります。

◆ operator TYP *()

operator TYP * ( void  )

[取得] メモリの参照.

覚え書き
OpenしていないとNULLが返ります。
戻り値
アドレス

TnbSharedMemory.h288 行目に定義があります。

◆ operator->() [1/2]

TYP * operator-> ( void  )

[取得] メモリの参照.

覚え書き
OpenしていないとNULLが返ります。
戻り値
アドレス

TnbSharedMemory.h308 行目に定義があります。

◆ operator->() [2/2]

const TYP * operator-> ( void  ) const

[取得] メモリの参照.

覚え書き
OpenしていないとNULLが返ります。
戻り値
アドレス

TnbSharedMemory.h318 行目に定義があります。