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;
做成一個按鈕,點了就能多載,這樣。
uj5u.com熱心網友回復:
try。。。catch?uj5u.com熱心網友回復:
做一個按鈕,點擊一下就能多載那樣,,就是重新載入一次function TForm2.ReadFromPipe(Pipe: THandle): string;
uj5u.com熱心網友回復:
界面上放一個button 然后雙擊 在buttonclick 里面 寫ReadFromPipe(Pipe);是這意思嗎?
uj5u.com熱心網友回復:
源代碼應該有問題,你還不如先解決源代碼的問題,而不是只是想著怎么自動重啟。下面的代碼僅供參考:
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;
uj5u.com熱心網友回復:
try...
except
... //此處處理
end;
uj5u.com熱心網友回復:
將代碼放入執行緒,建立執行緒使用時間 狀態字:timeuse:Double;
新建監控執行緒,判斷if timeuse>timeout then begin t1.termiante; t1:=Tt1.create; t1.resume; end;
uj5u.com熱心網友回復:
執行緒中處理是可以的。uj5u.com熱心網友回復:
代碼的重啟,首先要對錯碼出錯,進行判斷,是功能性還是壞死性的錯誤。功能性錯誤,是由于環境造成的,可以定時反復,測驗執行。否則不能重復的。
比較好的方式:
try
...
except
... // 出錯處理
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/34270.html
標籤:VCL組件開發及應用
下一篇:grid控制元件
