Oprette forældreløs tråd
Reference til spørgsmålet: http://www.eksperten.dk/spm/842711Kan man lave en tråd der ikke hænger på programmet, en forældreløs tingest der, efter programmet er afsluttet, kan slette exe-filen igen?
Jeg legede lidt med det, men uden held. Tråden bliver nakket sammen med hovedprogrammet:
unit UKillThread;
interface
uses
SysUtils, Classes, Windows;
type
TKillThread = class(TThread)
private
fExeName: string;
fDeleted: boolean;
public
constructor Create(const aExeName: string); reintroduce;
procedure Execute; override;
end;
implementation
{ TKillThread }
constructor TKillThread.Create(const aExeName: string);
begin
inherited Create(false);
FreeOnTerminate := true;
fExeName := aExeName;
end;
procedure TKillThread.Execute;
var
Log: TStringList;
begin
inherited;
Log := TStringList.Create;
try
Log.Add(format('Starter nu: %d',[GetTickCount]));
fDeleted := false;
while not (Terminated or fDeleted) do
begin
if not fDeleted then
Sleep(200 + random(100));
fDeleted := SysUtils.DeleteFile(fExeName);
Log.Add(format('Yelp: %s',[BoolToStr(fDeleted)]));
end;
Log.Add(format('Lukker nu: %d',[GetTickCount]));
finally
Log.SaveToFile('c:\thread.log');
end;
end;
end.
