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");
//指定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();
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)) );
}
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)) );
}