程序功能失效后,如何重新载入这一段代码?

[复制链接]
查看11 | 回复8 | 2021-1-27 05:31:17 | 显示全部楼层 |阅读模式
functionTForm2.ReadFromPipe(Pipe:THandle):string;
const
ReadBuffer=4096;
var
Buffer:PAnsiChar;
BytesRead:DWORD;
begin
Result:='';
ifGetFileSize(Pipe,nil)=0then
Exit;
代码省略100行。。。
。。。。
。。。。
。。。。
。。。。
由于某种功能使用后导致该代码失效,只能重启程序来使用,
问题:
程序功能失效后,如何重新载入这一段代码?需要详细的。
functionTForm2.ReadFromPipe(Pipe:THandle):string;
做成一个按钮,点了就能重载,这样。
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
try。。。catch?
回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
做一个按钮,点击一下就能重载那样,,
就是重新载入一次functionTForm2.ReadFromPipe(Pipe:THandle):string;




回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
界面上放一个button然后双击在buttonclick里面写ReadFromPipe(Pipe);
是这意思吗?
回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
源代码应该有问题,你还不如先解决源代码的问题,而不是只是想着怎么自动重启。
下面的代码仅供参考:
functionReadPipe(Pipe:THandle;varBytesRemain:Integer):AnsiString;
//通过管道读取Cmd控制台的输出,BytesRemain为未读的字节数
var
TextBuffer:array[1..32767]ofAnsiChar;
BytesRead:LongWord;
PipeSize:Cardinal;
begin
Result:='';
PipeSize:=Sizeof(TextBuffer);
//检查管道是否有东西可读
PeekNamedPipe(Pipe,nil,PipeSize,@BytesRead,@PipeSize,@BytesRemain);
ifBytesRead>0then
begin
ReadFile(Pipe,TextBuffer,PipeSize,BytesRead,nil);
Result:=AnsiString(TextBuffer);//TextBuffer内含的是AnsiString字符串
SetLength(Result,BytesRead);
end;
end;

回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
try
...
except
...//此处处理
end;
回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
将代码放入线程,
建立线程使用时间状态字:timeuse:Double;
新建监控线程,判断iftimeuse>timeoutthenbegint1.termiante;t1:=Tt1.create;t1.resume;end;


回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
线程中处理是可以的。
回复

使用道具 举报

千问 | 2021-1-27 05:31:17 | 显示全部楼层
代码的重启,首先要对错码出错,进行判断,是功能性还是坏死性的错误。
功能性错误,是由于环境造成的,可以定时反复,测试执行。否则不能重复的。
比较好的方式:
try
...
except
...//出错处理
end;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行