ich habe ein Seltsammens Problem bei folgendem code:
Code: Alles auswählen
procedure run7Za(Para:String;var aus:TSTringlist);
var
Thread:TBackupThread;
begin
Thread:=TBackupThread.Create(True);
Thread.files:=aus;
Thread.cd:='7z ' + Para;
try
thread.Execute
finally
writeln('ft:',aus.Count);
end;
end;
Danach muss ich dann das Programm mit kill Klillen.
wenn ich jetzt thread.resume aufrufe geht das zwar aber ich habe kein Inhalt in aus.
code von monta. Als ich ihn aus der Lazarus IDE kopieren wollte und hier dann einfügen wollte beendet sich jedes mal die IDE. Ich musste ihn über GEedit kopieren. Ich weiß nicht warum.
Code: Alles auswählen
procedure TBackupThread.Execute;
//----Lazarus-Wiki----:
const
READ_BYTES = 2048;
var
S: TStringList;
M: TMemoryStream;
P: TProcess;
n: LongInt;
BytesRead: LongInt;
begin
writeln('CD:',cd);
M := TMemoryStream.Create; BytesRead := 0;
P := TProcess.Create(nil);P.CommandLine := cd;
p.ShowWindow := swoHIDE; P.Options := [poUsePipes]; P.Execute;
while P.Running do begin
M.SetSize(BytesRead + READ_BYTES); // stellt sicher daß wir Platz haben
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES); // versuche es zu lesen
if n > 0 then begin Inc(BytesRead, n); end else Sleep(100); // keine Daten, warte 100 ms
end;
// lese den letzten Teil
repeat
// stellt sicher daß wir Platz haben
M.SetSize(BytesRead + READ_BYTES);
// versuche es zu lesen
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
if n > 0 then
begin
Inc(BytesRead, n);
end;
until n <= 0;
M.SetSize(BytesRead);
m.Position:=0;
files.Clear;
try
files.LoadFromStream(m);
finally
S.Free;
P.Free;
M.Free;
end;
end;
kann mir da jemand von euch weiter helfen ?