10 个解决方案
#1
就是系统资源不足,也就是内存不够用了。你要检查程序代码占内存,未释放,从而占用内存,持续增长,造成系统资源不足。
#2
程序加上 内存泄漏报告
delphi2010以后加上
ReportMemoryLeaksOnShutdown:=boolean(DebugHook);
delphi 7 使用fastmm4 去检测
如果有多线程操作同一io,加线程锁
delphi2010以后加上
ReportMemoryLeaksOnShutdown:=boolean(DebugHook);
delphi 7 使用fastmm4 去检测
如果有多线程操作同一io,加线程锁
#3
找到原因吗? 认真查找会有结果。
#4
检查程序写磁盘文件时,是否出现重复写一个文件,造成I/O错误。写磁盘文件要排它性,即唯一性。
#5
这个键盘绝了...
#6
大概判断:相关的工作没做互斥吧?就是来了事件就响应了,结果可能两个或多个相同的消息来了,一个操作未完成,另一个操作又进入了。
用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成)
1、加入任务:有任务则加入队列;
2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成)
1、加入任务:有任务则加入队列;
2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
#7
应该是这样的,我前面也是在写一个生产者-消费者模型的程序,没有互斥引起的。
#8
哎,代码太多,唯一跟文本io有关的
#9
哎,代码太多,唯一跟文本io有关的,就是这个函数,也是用的最多最频繁的,是不是跟这个有关?
procedure writelnlogfile(str : string);
begin
try
writeln(Logfile,Formatdatetime('yyyy-mm-dd hh:mm:ss',now())+' '+str);
Flush(Logfile);
except
end;
end;
procedure writelnlogfile(str : string);
begin
try
writeln(Logfile,Formatdatetime('yyyy-mm-dd hh:mm:ss',now())+' '+str);
Flush(Logfile);
except
end;
end;
#10
1.程序没有释放内存机制,导致程序占用系统越来越多的内存,最后导致崩溃。
2.程序对I/O设备使用后,没有释放使用权,而导致下一周期调用I/O设备的时候出错。——这个 也有可能是设备端口本身的稳定性导致的。
根据提供的图片,推测极有可能是由于原因2引起的。调用端口之前一定要加入检测端口是否空闲的代码
2.程序对I/O设备使用后,没有释放使用权,而导致下一周期调用I/O设备的时候出错。——这个 也有可能是设备端口本身的稳定性导致的。
根据提供的图片,推测极有可能是由于原因2引起的。调用端口之前一定要加入检测端口是否空闲的代码
#1
就是系统资源不足,也就是内存不够用了。你要检查程序代码占内存,未释放,从而占用内存,持续增长,造成系统资源不足。
#2
程序加上 内存泄漏报告
delphi2010以后加上
ReportMemoryLeaksOnShutdown:=boolean(DebugHook);
delphi 7 使用fastmm4 去检测
如果有多线程操作同一io,加线程锁
delphi2010以后加上
ReportMemoryLeaksOnShutdown:=boolean(DebugHook);
delphi 7 使用fastmm4 去检测
如果有多线程操作同一io,加线程锁
#3
找到原因吗? 认真查找会有结果。
#4
检查程序写磁盘文件时,是否出现重复写一个文件,造成I/O错误。写磁盘文件要排它性,即唯一性。
#5
这个键盘绝了...
#6
大概判断:相关的工作没做互斥吧?就是来了事件就响应了,结果可能两个或多个相同的消息来了,一个操作未完成,另一个操作又进入了。
用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成)
1、加入任务:有任务则加入队列;
2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
用生产者-消费者模式,建立任务队列(动态或静态,由于相关操作很频繁,我做类似的操作常使用静态数组——前提是我判断在有序的调度中,这些操作可以不费多少时间完成)
1、加入任务:有任务则加入队列;
2、处理任务(一般用线程):处理当前的任务,完成则删除(动态)或作标记(静态)。
#7
应该是这样的,我前面也是在写一个生产者-消费者模型的程序,没有互斥引起的。
#8
哎,代码太多,唯一跟文本io有关的
#9
哎,代码太多,唯一跟文本io有关的,就是这个函数,也是用的最多最频繁的,是不是跟这个有关?
procedure writelnlogfile(str : string);
begin
try
writeln(Logfile,Formatdatetime('yyyy-mm-dd hh:mm:ss',now())+' '+str);
Flush(Logfile);
except
end;
end;
procedure writelnlogfile(str : string);
begin
try
writeln(Logfile,Formatdatetime('yyyy-mm-dd hh:mm:ss',now())+' '+str);
Flush(Logfile);
except
end;
end;
#10
1.程序没有释放内存机制,导致程序占用系统越来越多的内存,最后导致崩溃。
2.程序对I/O设备使用后,没有释放使用权,而导致下一周期调用I/O设备的时候出错。——这个 也有可能是设备端口本身的稳定性导致的。
根据提供的图片,推测极有可能是由于原因2引起的。调用端口之前一定要加入检测端口是否空闲的代码
2.程序对I/O设备使用后,没有释放使用权,而导致下一周期调用I/O设备的时候出错。——这个 也有可能是设备端口本身的稳定性导致的。
根据提供的图片,推测极有可能是由于原因2引起的。调用端口之前一定要加入检测端口是否空闲的代码