refactored ce_cdbcmd with ce_common process tools

This commit is contained in:
Basile Burg 2014-11-07 14:09:49 +01:00
parent dd65981470
commit 4ef06c984a
1 changed files with 12 additions and 38 deletions

View File

@ -33,7 +33,6 @@ type
procedure cdbOutput(sender: TObject); procedure cdbOutput(sender: TObject);
procedure cdbTerminate(sender: TObject); procedure cdbTerminate(sender: TObject);
procedure cdbOutputToGui; procedure cdbOutputToGui;
procedure cdbFree;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
@ -62,7 +61,7 @@ end;
destructor TCECdbWidget.destroy; destructor TCECdbWidget.destroy;
begin begin
if Enabled then begin if Enabled then begin
cdbFree; killProcess(fCdbProc);
EntitiesConnector.removeObserver(self); EntitiesConnector.removeObserver(self);
end; end;
inherited; inherited;
@ -100,7 +99,7 @@ begin
outname := fProject.outputFilename; outname := fProject.outputFilename;
if not fileExists(outname) then exit; if not fileExists(outname) then exit;
// //
cdbFree; killProcess(fCdbProc);
fCdbProc := TAsyncProcess.create(nil); fCdbProc := TAsyncProcess.create(nil);
fCdbProc.Executable := 'cdb'; fCdbProc.Executable := 'cdb';
fCdbProc.Parameters.Add('-c'); fCdbProc.Parameters.Add('-c');
@ -144,7 +143,7 @@ const
begin begin
if fCdbProc <> nil then if fCdbProc <> nil then
fCdbProc.Input.Write(cmd[1], length(cmd)); fCdbProc.Input.Write(cmd[1], length(cmd));
cdbFree; killProcess(fCdbProc);
end; end;
procedure TCECdbWidget.txtCdbCmdKeyPress(Sender: TObject; var Key: char); procedure TCECdbWidget.txtCdbCmdKeyPress(Sender: TObject; var Key: char);
@ -166,34 +165,20 @@ end;
procedure TCECdbWidget.cdbOutputToGui; procedure TCECdbWidget.cdbOutputToGui;
var var
str: TMemoryStream;
lst: TStringList; lst: TStringList;
cnt: Integer; cnt: Integer;
sum: Integer;
begin begin
if fCdbProc = nil then exit; if fCdbProc = nil then exit;
//
cnt := 0;
sum := 0;
str := TMemoryStream.Create;
lst := TStringList.Create; lst := TStringList.Create;
try
while fCdbProc.Output.NumBytesAvailable <> 0 do processOutputToStrings(fCdbProc, lst);
begin
str.Size := str.Size + 1024;
cnt := fCdbProc.Output.Read((str.Memory + sum)^, 1024);
sum += cnt;
end;
str.Size := sum;
lst.LoadFromStream(str);
for cnt := 0 to lst.Count-1 do for cnt := 0 to lst.Count-1 do
lstCdbOut.AddItem(lst.Strings[cnt], nil); lstCdbOut.AddItem(lst.Strings[cnt], nil);
lstCdbOut.Items[lstCdbOut.Items.Count-1].MakeVisible(true); lstCdbOut.Items[lstCdbOut.Items.Count-1].MakeVisible(true);
finally
lst.Free; lst.Free;
str.Free; end;
end; end;
procedure TCECdbWidget.cdbOutput(sender: TObject); procedure TCECdbWidget.cdbOutput(sender: TObject);
@ -204,18 +189,7 @@ end;
procedure TCECdbWidget.cdbTerminate(sender: TObject); procedure TCECdbWidget.cdbTerminate(sender: TObject);
begin begin
cdbOutputToGui; cdbOutputToGui;
cdbFree; killProcess(fCdbProc);
end;
procedure TCECdbWidget.cdbFree;
begin
if fCdbProc = nil then
exit;
//
if fCdbProc.Running then
fCdbProc.Terminate(0);
fCdbProc.Free;
fCdbProc := nil;
end; end;
end. end.