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

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
...全文
165 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
  • 打赏
  • 举报
回复
强制结束,引用计数什么的没有得到清理。系统回收也不会马上,你重启机器肯定就好了
内容概要:本文介绍了一种用于电磁暂态(EMT)研究的第四类全变流器型风力发电系统的通用Simulink仿真模型,旨在构建一个能够准确反映实际风电系统动态特性的简化通用模型。该模型涵盖了风力机、传动链、发电机、全功率变流器及其控制策略等关键组成部分,重点突出系统在电网故障、风速波动等复杂工况下的动态响应能力,适用于风电并网电磁暂态分析、新型电力系统稳定性评估及高比例可再生能源接入场景的研究。模型设计兼顾准确性与仿真效率,便于研究人员快速搭建和调试,推动风电系统建模与控制技术的发展; 适合人群:具备一定电力系统理论基础和MATLAB/Simulink仿真能力,从事新能源发电、电力电子变换、风电并网控制及相关方向的研究生、科研人员及工程技术人员; 使用场景及目标:①开展风电系统在电网扰动下的电磁暂态仿真分析;②研究全功率变流器风电机组的动态行为与控制特性;③支撑新型电力系统中高渗透率风电接入的稳定性与电能质量评估,服务于学术研究、课程教学与工程项目前期仿真验证; 阅读建议:建议读者结合文中提供的模型结构与参数设置,在Simulink环境中动手复现并调试仿真模型,通过设置不同运行工况(如三相短路、低电压穿越、风速突变等)观察系统响应,深入理解全变流器风电机组的建模方法、控制逻辑与动态特性,进而拓展应用于更复杂的多机并网或综合能源系统仿真场景。
源码下载地址: https://pan.quark.cn/s/d18200fd2664 在基于Ubuntu的系统中,针对TCP与UDP网络进行排错对于开发人员及系统维护者而言是日常工作中的关键环节。为了能够迅速地识别并解决网络层面的故障,挑选出合适的辅助工具显得尤为必要。提及的"适用于ubuntu的TCP/UDP排错资源"很可能是指向`mNetAssist`这款应用,从压缩文件清单中包含一个名为`mNetAssist-released.deb`的条目来看,这通常表明该文件是为Debian或Ubuntu平台设计的软件安装包。`mNetAssist`作为一个功能全面的网络监控与排错软件,能够协助用户对TCP/IP网络连接进行检测、剖析以及调试。接下来,我们将对这款软件的各项特性以及其在Ubuntu系统上的安装与运用方法进行详尽的阐述。 为了部署`mNetAssist`,首先需要确认Ubuntu系统已经更新至最新状态,并且已经配置了`apt`软件包管理机制。在终端界面中输入下列指令来执行软件包的安装流程: ```bash sudo apt update sudo apt install dpkg ``` 接着,将`mNetAssist-released.deb`软件包文件传输到Ubuntu系统的某个文件夹内,例如`~/Downloads`目录,随后利用`dpkg`指令进行安装操作: ```bash cd ~/Downloads sudo dpkg -i mNetAssist-released.deb ``` 在安装阶段若遭遇依赖性难题,可能需要借助`apt-get`来处理: ```bash sudo apt-get install -f ``` 完成安装后,用户可以通...

16,550

社区成员

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

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

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