ACE内存映射学习

ACE中ACE_MMAP_Memory_Pool、ACE_Lite_MMAP_Memory_Pool、ACE_Pagefile_Memory_Pool都封装了操作系统的内存映射文件的功能.因此可以实现进程间的通信。闲来无聊,练练自己的笨手...

进程1代码示例(写入值):

        //定义内存映射的名称,以供进程间通信
        ACE_TCHAR  *pszPoolName =  ACE_TEXT("SelfPoolName");
        
//指定ACE_PI_Control_Block参数,表示分配的内存与位置无关
        typedef  ACE_Malloc_T< ACE_MMAP_Memory_Pool, ACE_Process_Mutex, ACE_PI_Control_Block >  SharedMalloc;

        SharedMalloc  myMalloc( pszPoolName );

        ACE_TCHAR  szName[]  
=  ACE_TEXT("fangkm");
        ACE_TCHAR  szSchool[]  
=  ACE_TEXT("whut");

        
//分配内存
        ACE_TCHAR* pszName = (ACE_TCHAR*)myMalloc.malloc( sizeof( szName ) );
        ACE_OS::strcpy( pszName, szName );
        
//为该内存地址关联一个名称
        if-1 == myMalloc.bind( "Name", pszName ) )
        {
            AtlMessageBox( NULL, _T(
"failed") );
        }

        ACE_TCHAR
* pszSchool = (ACE_TCHAR*)myMalloc.malloc( sizeof( szSchool ) );
        ACE_OS::strcpy( pszSchool, szSchool );
        
if-1 == myMalloc.bind( "School", pszSchool ) )
        {
            AtlMessageBox( NULL, _T(
"failed") );
        }

        ACE_OS::sleep( 
10 );

        
//释放对象相关的资源
        myMalloc.remove();
进程2代码示例(读取值):
        ACE_TCHAR  *pszPoolName =  ACE_TEXT("SelfPoolName");

        typedef  ACE_Malloc_T
< ACE_MMAP_Memory_Pool, ACE_Process_Mutex, ACE_PI_Control_Block >  SharedMalloc;
        SharedMalloc  myMalloc( pszPoolName );

        ACE_TCHAR  
*pszName = NULL;
        ACE_TCHAR  
*pszSchool = NULL;
        
//查找Name关联的内存值
        if( myMalloc.find( "Name", (void*&)pszName ) != -1 )
        {
            AtlMessageBox( NULL, _U_STRINGorID(CA2T(pszName)) );
        }

        
if( myMalloc.find( "School", (void*&)pszSchool ) != -1 )
        {
            AtlMessageBox( NULL, _U_STRINGorID(CA2T(pszSchool)) );
        }

 

posted @ 2009-06-23 11:38  孤竹君  阅读(966)  评论(0编辑  收藏  举报