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

chujoy 2018-11-17 01:07:17
function TForm2.ReadFromPipe(Pipe: THandle): string;
const
ReadBuffer = 4096;
var
Buffer: PAnsiChar;
BytesRead: DWORD;
begin
Result := '';
if GetFileSize(Pipe, nil) = 0 then
Exit;

代码省略100行。。。
。。。。
。。。。
。。。。
。。。。
由于某种功能使用后导致该代码失效,只能重启程序来使用,
问题:
程序功能失效后,如何重新载入这一段代码?需要详细的。
function TForm2.ReadFromPipe(Pipe: THandle): string;

做成一个按钮,点了就能重载,这样。
...全文
344 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2019-01-08
  • 打赏
  • 举报
回复
代码的重启,首先要对错码出错,进行判断,是功能性还是坏死性的错误。
功能性错误,是由于环境造成的,可以定时反复,测试执行。否则不能重复的。
比较好的方式:
try
...
except
... // 出错处理
end;
morninggood 2018-12-30
  • 打赏
  • 举报
回复
线程中处理是可以的。
doloopcn 2018-12-17
  • 打赏
  • 举报
回复
将代码放入线程,
建立线程使用时间 状态字:timeuse:Double;
新建监控线程,判断if timeuse>timeout then begin t1.termiante; t1:=Tt1.create; t1.resume; end;


Frank.WU 2018-12-12
  • 打赏
  • 举报
回复
try ... except ... //此处处理 end;
BlueStorm 2018-12-11
  • 打赏
  • 举报
回复
源代码应该有问题,你还不如先解决源代码的问题,而不是只是想着怎么自动重启。 下面的代码仅供参考:

function ReadPipe(Pipe: THandle; var BytesRemain: Integer): AnsiString;
  //通过管道读取Cmd控制台的输出,BytesRemain为未读的字节数
var
  TextBuffer: array[1..32767] of AnsiChar;
  BytesRead : LongWord;
  PipeSize  : Cardinal;
begin
  Result := '';
  PipeSize := Sizeof(TextBuffer);
  //检查管道是否有东西可读
  PeekNamedPipe(Pipe, nil, PipeSize, @BytesRead, @PipeSize, @BytesRemain);
  if BytesRead > 0 then
  begin
    ReadFile(Pipe, TextBuffer, PipeSize, BytesRead, nil);
    Result := AnsiString(TextBuffer); //TextBuffer内含的是AnsiString字符串
    SetLength(Result, BytesRead);
  end;
end;
p47655255 2018-12-11
  • 打赏
  • 举报
回复
界面上放一个button 然后双击 在buttonclick 里面 写ReadFromPipe(Pipe);
是这意思吗?
ooolinux 2018-11-17
  • 打赏
  • 举报
回复
try。。。catch?
chujoy 2018-11-17
  • 打赏
  • 举报
回复
做一个按钮,点击一下就能重载那样,,

就是重新载入一次function TForm2.ReadFromPipe(Pipe: THandle): string;






5,392

社区成员

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

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