Avatar billede hrc Mester
26. august 2008 - 21:41 Der er 7 kommentarer og
1 løsning

Oprette forældreløs tråd

Reference til spørgsmålet: http://www.eksperten.dk/spm/842711

Kan 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.
Avatar billede arne_v Ekspert
26. august 2008 - 21:55 #1
En traad er en del af en process. Ingen process => ingen traad. Du bliver
derfor noedt til at starte en ny process.
Avatar billede hrc Mester
27. august 2008 - 11:20 #2
Tænkte også i retning af fork() som har sit eget adresseområde.

Får jeg tid bliver det nok et kompakt program, der ikke skal dukke op i programlinjen, som fyres af når hovedprogrammet lukker. Da det er lille gør det ikke noget at linke det til hovedprogrammet og derved distribuere en enkelt fil.
Avatar billede hrc Mester
10. september 2008 - 09:46 #3
Arne: Vil du have lidt points?
Avatar billede arne_v Ekspert
10. september 2008 - 23:41 #4
gerne
Avatar billede hrc Mester
11. september 2008 - 11:29 #5
Det får du så - det er ærgerligt man ikke kan "forke" i windows.
Avatar billede arne_v Ekspert
11. september 2008 - 12:38 #6
Du kan nemt starte en process ogsaa i Windows.

Men en aegte fork haenger meget paa *nix styre systemer, fordi evnen til at klone
aabne sockets etc. er noget som skal understoettes dybt inde i styre systemet.
Avatar billede hrc Mester
11. september 2008 - 13:21 #7
Kan du give mig nogle nøgleord?
Avatar billede arne_v Ekspert
11. september 2008 - 13:37 #8
Til at starte en process ?

CreateProcess kaldet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester