请教:程序出现“配额不足,无法处理此命令”问题

michaeliao 2015-12-30 01:35:42
一个采集数据的程序,程序一直运行。大概每一分钟保存一次采集的结果到文件中。运行一周左右,在保存文件的时候出现“配额不足,无法处理此命令”错误。如果不处理该错误,让程序继续运行,程序还能正常运行。但是大概个把小时之后,出现第二次同样的错误,系统死机。关闭系统都不行,必须通过关闭电源,强制重新启动电脑。
从网上看到的各种解决方法。简单的说明一下程序可能出现问题的地方:
1、禁用或关闭系统配额管理。
结果:禁用了,问题还是会出现
2、有可能创建线程过多。
说明:我整个程序里面除了主线程之外,只创建了一个线程。线程的主要作用是检测系统时间,当到了特定时间,往串口发送一组数据。线程每检测一次系统时间,休眠2秒,再进行下次系统时间检测,当到了某个特定的时间,就开始发送数据。大概10分钟发送一次数据
3、虚拟内存太小。这个还在测试,因为这个测试时间太长,一般出问题也是好几天之后。
4、配置参数“irps4tacksize”太小
看网上说这个是服务器上才会出现的问题。不过到时候也要试一下

系统是XP

请教各位,这个是什么原因?

出错的代码如下:

int CAirVisibilityApp::SaveCountToFile(CString sPath,double *pDistance, double *pPhoton, int nSize)
{
CString sFileName="";
CStdioFile sf;
CString strOut="";
CString sTemp="";
float fDis=0;
int i=0;
CErrDescribe cErr;

sFileName=sPath;

try
{
if(sf.Open(sFileName,CFile::modeCreate|CFile::modeWrite)) //在这一句出错
{
for(i=0;i<nSize;i++)
{
strOut="";

strOut.Format("%.3f",pDistance[i]);
sTemp.Format("%.5f",pPhoton[i]);
strOut=strOut + " " + sTemp + "\n";
sf.WriteString(strOut);
}
sf.Close();

return 1;
}
else
{
DWORD nErr=GetLastError();
LPSTR lpErr;
CString sErr;

lpErr=cErr.ConvertErrorCodeToString(nErr);
sErr=CString(lpErr);

cErr.SaveErrDescribe("SavePhtonCountToFile",-1,"保存文件时创建写文件失败",sErr);
return 0;
}
}
catch (...)
{
DWORD nErr=GetLastError();
LPSTR lpErr;
CString sErr;

lpErr=cErr.ConvertErrorCodeToString(nErr);
sErr=CString(lpErr);

cErr.SaveErrDescribe("SavePhtonCountToFile",-11,"保存文件失败",sErr);
return 0;
}
}
...全文
2584 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
void_main_void 2016-02-28
  • 打赏
  • 举报
回复
崩溃时创建dump文件。通过尝试用windbg来分析dump文件找到错误点。
michaeliao 2016-02-28
  • 打赏
  • 举报
回复
引用 2 楼 VisualEleven 的回复:
优化一下,文件只open一下,比如在初始化的地方open,在程序退出的地方close,其它地方直接操作Read/Write
这个可能不行,因为程序每一分钟左右测试一组数据,每次测试的数据都单独保存成一个文件。
michaeliao 2016-02-28
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
1 任务管理器查看 是否存在内存/资源泄漏 2 单个文件是否过大? 每次保存换一个文件名试试看
单个文件都很小,只有13K左右。内存泄露我很早以前用一个软件检测过,没有发现 当然,也有可能没有检测出来,这个需要再试试
michaeliao 2016-02-28
  • 打赏
  • 举报
回复
引用 3 楼 jennyvenus 的回复:
除了楼上所说,在长时间执行的函数中,尽量去掉所有的临时变量,以及cstring型变量。
这个是什么情况?为什么?有什么说法吗?
赵4老师 2016-01-04
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏! 搜”GDI泄露检测“
用户 昵称 2015-12-31
  • 打赏
  • 举报
回复
除了楼上所说,在长时间执行的函数中,尽量去掉所有的临时变量,以及cstring型变量。
Eleven 2015-12-30
  • 打赏
  • 举报
回复
优化一下,文件只open一下,比如在初始化的地方open,在程序退出的地方close,其它地方直接操作Read/Write
zgl7903 2015-12-30
  • 打赏
  • 举报
回复
1 任务管理器查看 是否存在内存/资源泄漏 2 单个文件是否过大? 每次保存换一个文件名试试看

16,473

社区成员

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

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

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