目前为止尚无人能解答的难题(300分)

  • 主题发起人 主题发起人 gameabc
  • 开始时间 开始时间
这个问题关键在OnTimer事件中,由于系统的问题,实际上的10ms响应时间太小,
你的ontimer事件在响应过程中就可能又发生一次ontimer事件啦,而系统有要保留现场,
结果是资源耗尽。

procedure TForm1.Timer1Timer(Sender: TObject);
var X,Y : Integer;
begin
Timer1.enabled=false;

If (TmpBmp.Width = 0) or (TmpBmp.Height = 0) Then Exit;
For X := 0 To (Width div TmpBmp.Width) Do
For Y:= 0 To (Height div TmpBmp.Height) Do
Canvas.Draw(X*TmpBmp.Width,Y*TmpBmp.Height,TmpBmp);
end;

timer1.enabled=true;

end.
在Ontimer事件中关闭timer直到ontimer完成后再打开。

这个地方是解决的方法,如果有判断是否资源足够,在分配资源后判断是否成功就可以
嘛。
 
就好象人的食量没有理论上没有一个绝对限制一样,对于同一个量,有的人可能还没有达到
就完完了,而有的人可能还没有饱.
电脑操作系统也是一样,如果有这么一个限制的话,MS可能不会把这件事留给程序员来做,
必竟操作系统比谁都清楚肚量还有多大.
但是有一点我们可能明白,有的人食量可能是1斤,甚至可能是1Kg,但是绝没有人的食量是10Kg,
所以如果你知道你面前是"100Kg压缩饼干,和10kg水",我建议你还是不要去动他,必竟就算白
痴也知道太饱不是好事.
你的任务不是要知道肚里还有多少空的地方,而是应该把食物量保持在安全范围内.
 
查查MSDN,找出可以检查系统当前状态的函数应该不难(我没有找,也没觉得有什么必要),
不过系统运行稳定的因素有很多种,你看看任务管理器中进程列表中可以显示多少列就知
道了,这些列中大多数都根系统运行稳定有关,每一列的数字超过一定的数值都会造成系
统不稳定,不过很遗憾,基本上每一种因素都没有一个额定,可以运行稳定的数字.
 
这是系统崩溃!在你的应用中不会引发异常就完蛋了。
一个不停的吃饼干的人,自己不知道“撑不撑”却希望别人告诉它,它才停止,嘿嘿……
还个思路吧!
 
你机器的内存有多大?我机器上当内存超过384M的时候,win98下很多东西都不能运行,比如游戏,
一运行就说内存不足,去掉一条内存就好了.似乎win98对大内存支持不好.
 
"一个不停的吃饼干的人,自己不知道“撑不撑”却希望别人告诉它,它才停止,嘿嘿……
还个思路吧!"
a poor programmer.思路出问题了。在瘟酒吧中,上帝保佑你,阿门。
 
http://www.to-happy.com上的诸多免费软件有一个叫垃圾清理器的,能够帮助你。
 
kao!最近怎么总有几个脑袋积水的人问一些二不楞登的问题。
gameabc,你要是连这个低等的错误(还找什么解决方法?你的思路根本就是错的!)都
意识不到,还谈什么做共享软件?先把Delphi基础教材翻几遍,再每天坚持编程4小时以上,
再去考虑做软件吧!
tohappy,你要是自我感觉良好的话,你就自己找个犄角旮旯自我陶醉去!我看你和这个
gameabc都是一号货色!
 
如果准备自己写的程序安全退出,可以采用异常处理。

如果准备监督整个计算机程序运行,那么采用hook...
 
to:progray
你知道为什么吗?
如果你没有写过大型的程序自然不会遇到这些超难度的问题啦

再补充一下:
我这个问题的意思是,在win98中,一个始终运行在那里的程序,当遇到系统资源不够的时候,
如何自动退出,而不是引起蓝屏,然后死机.我的例子只是一个演示,不是我的共享软件
 
用一个Delphi程序装入了830多M的地图数据,请注意是一次性全部装入,再把地图绘制出来,
还要作复杂的编辑,还包括不限级别的UNDO,REDO,俺的机器是128M内存的赛扬700.再运行
Delphi来修改调试这个系统,也没有出现资源不足的情况.

我感觉你的意思好象是如果有这么一个系统,不能很好的管理自己使用的资源,这时要运行
你的程序你需要在运行前检查系统资源是否还足够,如果不够就退出.

但是我劝你不要再钻这种牛角尖了,首
 
用一个Delphi程序装入了830多M的地图数据,请注意是一次性全部装入,再把地图绘制出来,
还要作复杂的编辑,还包括不限级别的UNDO,REDO,俺的机器是128M内存的赛扬700.再运行
Delphi来修改调试这个系统,也没有出现资源不足的情况.

我感觉你的意思好象是如果有这么一个系统,不能很好的管理自己使用的资源,这时要运行
你的程序你需要在运行前检查系统资源是否还足够,如果不够就退出.

但是我劝你不要再钻这种牛角尖了,做好你自己的程序,让自己的程序不要浪费资源就可以了.
别告诉我什么大的系统就会造成系统资源不足,VS.net够大了吧.
 
你的要求太简单:
只要监控(由于一直监控可用多线程)
资源情况(可以看当前可用内存判断),
当底于某个目标值就终止进程,完!
 
"当遇到系统资源不够的时候,如何自动退出,而不是引起蓝屏,然后死机."?
大哥,拜托你别管那么多事好不好?如果我运行了三个Delhi,两个photoshop,
我再运行一个word(如果这时还没死机的话),是不是word会检查一下资源是不
是够,然后再考虑该不该自动退出呢?如果这么考虑的话,你还该想想如果客户
机被黑了,你是不是要帮着防黑呢?这是用户使用的问题,就不该你考虑。
当然,如果这个系统资源不够是因为你的软件运行而产生的,那拜托您别再想当
资源不够的时候要干什么,而是想想,为什么会产生资源不足的情况?
是否该free的没free,该nil的没nil,否则不会像你说的那样。还有第三方控件
再使用的时候要格外注意。
 
我的共享软件就是不停的经常用到一些系统资源,然后释放,
需要的时候又会需要系统资源,所以,当运行了我的共享软件后,
用户又运行了很多其它的程序,所以,经常遇到系统资源不够的情况,
如果在使用系统资源的之前,能知道系统资源不够,那么就让自己退出,
而不是继续运行,以至......
 
还是无法解决。
看来大家都是这个水平。散分吧
 
多人接受答案了。
 
后退
顶部