程序为了防止多次运行,代码片段如下:
......
//创建共享内存
hApmsSystemTable = CreateFileMapping((HANDLE)0xffffffff, &sa, PAGE_READWRITE, 0,
(DWORD)sizeof(APMSSYSTEMTABLE), APMS_NAME_SYSTEM_TABLE );
if ( hApmsSystemTable == 0 )
{
sprintf( szBuff,"APMS System Table CreateFileMapping error" );
MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
ApmsSystemExit(1);
}
else
{
// Check of system existence
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
sprintf( szBuff,"APMS System is already existing!!" );
MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
CloseHandle(hApmsSystemTable);
ApmsSystemExit(1);
}
}
lpApmsSystemTable = MapViewOfFile(hApmsSystemTable, FILE_MAP_ALL_ACCESS,0,0,0);
if( lpApmsSystemTable == NULL )
{
sprintf( szBuff,"System Table MapViewOfFile error " );
MessageBox( NULL, szBuff, lpFuncName, MB_OK | MB_ICONSTOP );
CloseHandle(hApmsSystemTable);
ApmsSystemExit(1);
}
程序退出时我执行如下的内存卸载代码
......
if ( lpApmsSystemTable )
{
ret = UnmapViewOfFile( lpApmsSystemTable );
lpApmsSystemTable = NULL;
sprintf(szDebug,"Start unmap hApmsSystemTable return[%d].",ret);
LogInfo(szDebug);
}
CloseHandle(hApmsSystemTable);
hApmsSystemTable = NULL;
LogInfo("Close Handle Successfully!"); 我查看日志时发现执行UnmapViewOfFile( lpApmsSystemTable );返回1表示执行成功的。但是退出应用程序,并再次执行时却提示:APMS System is already existing!!。我只能通过重启机器才能解决。
请问如何才能将内存映射释放干净?
......
//创建共享内存
hApmsSystemTable = CreateFileMapping((HANDLE)0xffffffff, &sa, PAGE_READWRITE, 0,
(DWORD)sizeof(APMSSYSTEMTABLE), APMS_NAME_SYSTEM_TABLE );
if ( hApmsSystemTable == 0 )
{
sprintf( szBuff,"APMS System Table CreateFileMapping error" );
MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
ApmsSystemExit(1);
}
else
{
// Check of system existence
if ( GetLastError() == ERROR_ALREADY_EXISTS )
{
sprintf( szBuff,"APMS System is already existing!!" );
MessageBox( NULL, szBuff,lpFuncName, MB_OK | MB_ICONSTOP );
CloseHandle(hApmsSystemTable);
ApmsSystemExit(1);
}
}
lpApmsSystemTable = MapViewOfFile(hApmsSystemTable, FILE_MAP_ALL_ACCESS,0,0,0);
if( lpApmsSystemTable == NULL )
{
sprintf( szBuff,"System Table MapViewOfFile error " );
MessageBox( NULL, szBuff, lpFuncName, MB_OK | MB_ICONSTOP );
CloseHandle(hApmsSystemTable);
ApmsSystemExit(1);
}
程序退出时我执行如下的内存卸载代码
......
if ( lpApmsSystemTable )
{
ret = UnmapViewOfFile( lpApmsSystemTable );
lpApmsSystemTable = NULL;
sprintf(szDebug,"Start unmap hApmsSystemTable return[%d].",ret);
LogInfo(szDebug);
}
CloseHandle(hApmsSystemTable);
hApmsSystemTable = NULL;
LogInfo("Close Handle Successfully!"); 我查看日志时发现执行UnmapViewOfFile( lpApmsSystemTable );返回1表示执行成功的。但是退出应用程序,并再次执行时却提示:APMS System is already existing!!。我只能通过重启机器才能解决。
请问如何才能将内存映射释放干净?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货