在任务管理器强制关闭程序系统没有回收内存映射的那块内存吗?

ngzhan99 2013-11-29 12:10:57
我写了一个用于单示例程序的类,用的是内存映射的方式。其中的一个接口:
m_hMapFile =OpenFileMapping(FILE_MAP_ALL_ACCESS,
FALSE,
FLMM_INSTANCE_MAP_NAME);

if(m_hMapFile!=NULL)
{
bAlreadyExisted =TRUE;

m_lpInstanceData = (char*) MapViewOfFile(m_hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
sizeof(Instance_Data));

return TRUE;
}

//不存在
m_hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
sizeof(Instance_Data), // maximum object size (low-order DWORD)
FLMM_INSTANCE_MAP_NAME);

if(m_hMapFile==NULL)
{
return FALSE;
}

m_lpInstanceData= (char*) MapViewOfFile(m_hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
sizeof(Instance_Data));

然后在析构函数里面释放
if(NULL !=m_lpInstanceData)
UnmapViewOfFile(m_lpInstanceData);
m_lpInstanceData =NULL;

if(NULL != m_hMapFile)
CloseHandle(m_hMapFile);
m_hMapFile =NULL;


但是有时候我在任务管理器中关掉程序之后,在运行的时候就起不来了。是不是因为强制关闭的时候析构函数没能调用,释放不了? 按理说进程结束了系统会回收那些属于它的资源的,为什么我用 OpenFileMapping打开返回值不为NULL
...全文
98 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ngzhan99 2013-11-29
  • 打赏
  • 举报
回复
重启肯定是没问题的 我现在需要做的是不重启的情况下 我现在的做法是:在另一个程序A里开一个线程每隔一段时间CreateProcess拉起B(内存映射在这个程序里做)这个程序。 如果在任务管理器强制关掉它之后即使CreateProcess能拉起它,由于那块映射的内存还在,一判断以为是已经有进程运行了(其实这时候已经被强制关闭),结果马上退出。
引用 3 楼 baoyz 的回复:
这种类似的问题,我也干过。 我的做法是启动软件先尝试查找是否端口或有关内存被占用,如果是,就先进行清理,再运行当前程序。这样就防止了前次程序异常退出引起的系统冲突。
如果在A里清理就没法单示例了
baoyz 2013-11-29
  • 打赏
  • 举报
回复
这种类似的问题,我也干过。 我的做法是启动软件先尝试查找是否端口或有关内存被占用,如果是,就先进行清理,再运行当前程序。这样就防止了前次程序异常退出引起的系统冲突。
shen_wei 2013-11-29
  • 打赏
  • 举报
回复
那就等等看,实在不行如楼上说的重启。。
oyljerry 2013-11-29
  • 打赏
  • 举报
回复
强制结束,引用计数什么的没有得到清理。系统回收也不会马上,你重启机器肯定就好了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧