程序长时间运行,报“out of system resources”和“重叠I/O操作在进行中”

zhanghj5258 2017-06-26 10:29:51
用delphi做的一个自动生产控制程序,长时间运行,报“out of system resources”和“重叠I/O操作在进行中”,问题困扰了很长时间,现在对这个问题还是完全没有头绪,请教有哪些可能呢,有什么检查方法或者工具。下面的实际报错图片
...全文
1701 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhanghj5258 2019-04-24
  • 打赏
  • 举报
回复
找到原因,循环画线(canvas.MoveTo ,canvas.LineTo)的时候,把修改canvas.Pen.Color Style Width放在循环里了,放在循环外面就再也没出现过
  • 打赏
  • 举报
回复
很明显是资源加载了没释放, 最后导致句柄资源不足....方法楼上都说了 另外吐槽下 A: 17年6月的问题现在还没解决....这1年半你咋过的...... B: 这键盘看着真有沧桑感..........
  • 打赏
  • 举报
回复
可能是他们生产现场的机器....
doloopcn 2018-12-02
  • 打赏
  • 举报
回复
引用 12 楼 zhanghj5258 的回复:
一张图片频繁这样切换,是不是会有问题?在组件里这么用的,IconPath里有中文路径
FImgLeft.Picture.LoadFromFile (IconPath+'Icon\LeftRed.ico');
FImgLeft.Picture.LoadFromFile (IconPath+'Icon\LeftGreen.ico');


为什么要重复Load这两个ICO???
IDE中把它们放在fImgLeft1,fImgLeft2中,然后两个交替设置Visible就可以了

频繁对I/O操作,终究是程序的隐形炸弹
lyhoo163 2018-12-02
  • 打赏
  • 举报
回复
1、文件名中带有中文,系统读盘时,有时找一到目录。
2、在写文件代码中,加入Try语句,写盘不成功,就释放。
zhanghj5258 2018-12-01
  • 打赏
  • 举报
回复
一张图片频繁这样切换,是不是会有问题?在组件里这么用的,IconPath里有中文路径
FImgLeft.Picture.LoadFromFile (IconPath+'Icon\LeftRed.ico');
FImgLeft.Picture.LoadFromFile (IconPath+'Icon\LeftGreen.ico');
zhanghj5258 2018-12-01
  • 打赏
  • 举报
回复
我用EurekaLog捕捉了异常,
提示没有具体到代码行,直接指到Graphics.ReadIcon,我想是不是中文路径的问题,请高手帮我分析一下
doloopcn 2017-08-11
  • 打赏
  • 举报
回复
1.程序没有释放内存机制,导致程序占用系统越来越多的内存,最后导致崩溃。 2.程序对I/O设备使用后,没有释放使用权,而导致下一周期调用I/O设备的时候出错。——这个 也有可能是设备端口本身的稳定性导致的。 根据提供的图片,推测极有可能是由于原因2引起的。调用端口之前一定要加入检测端口是否空闲的代码
zhanghj5258 2017-08-10
  • 打赏
  • 举报
回复
哎,代码太多,唯一跟文本io有关的,就是这个函数,也是用的最多最频繁的,是不是跟这个有关? procedure writelnlogfile(str : string); begin try writeln(Logfile,Formatdatetime('yyyy-mm-dd hh:mm:ss',now())+' '+str); Flush(Logfile); except end; end;
zhanghj5258 2017-08-10
  • 打赏
  • 举报
回复
哎,代码太多,唯一跟文本io有关的
leeky 2017-07-06
  • 打赏
  • 举报
回复
大概判断:相关的工作没做互斥吧?就是来了事件就响应了,结果可能两个或多个相同的消息来了,一个操作未完成,另一个操作又进入了。 用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成) 1、加入任务:有任务则加入队列; 2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
oushengfen 2017-07-06
  • 打赏
  • 举报
回复
引用 6 楼 leeky 的回复:
大概判断:相关的工作没做互斥吧?就是来了事件就响应了,结果可能两个或多个相同的消息来了,一个操作未完成,另一个操作又进入了。 用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成) 1、加入任务:有任务则加入队列; 2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
应该是这样的,我前面也是在写一个生产者-消费者模型的程序,没有互斥引起的。
lyhoo163 2017-07-05
  • 打赏
  • 举报
回复
检查程序写磁盘文件时,是否出现重复写一个文件,造成I/O错误。写磁盘文件要排它性,即唯一性。
  • 打赏
  • 举报
回复
这个键盘绝了...
lyhoo163 2017-07-04
  • 打赏
  • 举报
回复
找到原因吗? 认真查找会有结果。
大肚肥肥 2017-06-28
  • 打赏
  • 举报
回复
程序加上 内存泄漏报告 delphi2010以后加上 ReportMemoryLeaksOnShutdown:=boolean(DebugHook); delphi 7 使用fastmm4 去检测 如果有多线程操作同一io,加线程锁
lyhoo163 2017-06-26
  • 打赏
  • 举报
回复
就是系统资源不足,也就是内存不够用了。你要检查程序代码占内存,未释放,从而占用内存,持续增长,造成系统资源不足。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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