/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Threads - Jeg forstår ikke......
Fra : Ulrik Vadstrup


Dato : 27-04-01 18:38

Jeg har kigget lidt på det demo eksempel som findes - men det har ikke givet
de vise sten. - og jeg har aldrig rigtig brugt det før :(

Det korte af det lange er at jeg har en procedure der henter en fil på
internettet - og jeg ville gerne at jeg kunne lave noget andet i programmet
imens - grundprincippet af proceduren ser sådan ud:

procedure TfrmMain.Hentsenestepatch1Click(Sender: TObject);
var
FileOnNet, LocalFileName, path: string;

begin
path := ExtractFilePath(Application.exename);
FileOnNet:='Et eller andet sted på nettet';
path := ExtractFilePath(Application.exename);
LocalFileName:= path + 'Test.txt';
if fGetInetFile(FileOnNet,LocalFileName)=True then
Begin
MessageDlg('Program hentet'
+#13+#10+'Du skal genstarte computeren, før programmet er opdateret',
mtInformation, [mbOK], 0);
end
else
Begin
ShowMessage('Fejl ved hentning af nyeste version');
end;
end;

Nogen der gider forklare mig lidt om det ?

--
Med venlig hilsen
Ulrik Vadstrup



 
 
Thomas Due (30-04-2001)
Kommentar
Fra : Thomas Due


Dato : 30-04-01 07:24

Hejsa,

Det er faktisk ikke så svært, når først man kan, men indtil da ...

Det du skal gøre er at du laver en tråd. (Følgende kode er utestet). F.x.

{**** Pseudo Kode Til Tråd ****}
Type
THentFil = Class(TThread)
Private
...
Protected
Procedure Execute;
Public
Constructor MyCreate;
Destructor Destroy; Override;
...
End;

implementation

Constructor THentFil.MyCreate;
Begin
FreeOnTerminate := TRUE; // Tråden free'er sig selv når den termineres.
inherited Create(TRUE); // Starter tråden med det samme, når den skabes.
End;

procedure THentFil.Execute;
Begin
While EjFaerdig do
Begin
// Her foretager du dig så hvad du nu skal.
// Vær opmærksom på at det er en løkke.
End;
Terminate;
End;
{**** Pseudo Kode Slut ****}

I dit hovedprogram et eller andet sted gør du så følgende :

{**** Kode Snip ****}
Procedure ....
Begin
...
with THentFil.Create do
Execute;
...
End;
{**** Snip Slut ****}

Så skulle der gerne ske det at du laver en tråd som henter din fil ned, og
som nedlægger sig selv når den er færdig.

Mvh
Thomas

"Ulrik Vadstrup" <vadstrup@post12.tele.dk> wrote in message news:9ccaou$d6g$1@news.cybercity.dk...
> Jeg har kigget lidt på det demo eksempel som findes - men det har ikke givet
> de vise sten. - og jeg har aldrig rigtig brugt det før :(
>
> Det korte af det lange er at jeg har en procedure der henter en fil på
> internettet - og jeg ville gerne at jeg kunne lave noget andet i programmet
> imens - grundprincippet af proceduren ser sådan ud:
>
> procedure TfrmMain.Hentsenestepatch1Click(Sender: TObject);
> var
> FileOnNet, LocalFileName, path: string;
>
> begin
> path := ExtractFilePath(Application.exename);
> FileOnNet:='Et eller andet sted på nettet';
> path := ExtractFilePath(Application.exename);
> LocalFileName:= path + 'Test.txt';
> if fGetInetFile(FileOnNet,LocalFileName)=True then
> Begin
> MessageDlg('Program hentet'
> +#13+#10+'Du skal genstarte computeren, før programmet er opdateret',
> mtInformation, [mbOK], 0);
> end
> else
> Begin
> ShowMessage('Fejl ved hentning af nyeste version');
> end;
> end;
>
> Nogen der gider forklare mig lidt om det ?
>
> --
> Med venlig hilsen
> Ulrik Vadstrup
>
>


Ken Madsen (30-04-2001)
Kommentar
Fra : Ken Madsen


Dato : 30-04-01 07:34

Hvad med noget i den her stil

_------------------_----------------_------------------_---------------

Unit uUpdateFile;

Uses Classes;

Type

TUpdateFileThread = class(TThread)
private
FFileOnNet,
FLocalFileName,
FPath: string
protected
procedure Execute; override;
procedure UpdateFile;
public
constructor Create(FileOnNet, LocalFileName, Path: string);
end;


constructor TUpdateFileThread.Create(FileOnNet, LocalFileName, Path:
string);
begin
FFileOnNet := FileOnNet;
FLocalFileName := LocalFileName;
FPath := Path;
FreeOnTerminate := True;
inherited Create(False);
end;

Procedure Execute;
begin
UpdataFile;
end;

procedure TfrmMain.Hentsenestepatch1Click(Sender: TObject);
begin
path := ExtractFilePath(Application.exename);
FileOnNet:='Et eller andet sted på nettet';
path := ExtractFilePath(Application.exename);
LocalFileName:= path + 'Test.txt';
if fGetInetFile(FileOnNet,LocalFileName)=True then
Begin
MessageDlg('Program hentet'
+#13+#10+'Du skal genstarte computeren, før programmet er opdateret',
mtInformation, [mbOK], 0);
end
else
Begin
ShowMessage('Fejl ved hentning af nyeste version');
end;
end;

end.

-----------------------------------------------------


og i den unit du kalder tråden fra!

TUpdateFileThread.Create('Et eller andet sted på nettet', path + 'Test.txt',
Application.exename)





"Ulrik Vadstrup" <vadstrup@post12.tele.dk> wrote in message
news:9ccaou$d6g$1@news.cybercity.dk...
> Jeg har kigget lidt på det demo eksempel som findes - men det har ikke
givet
> de vise sten. - og jeg har aldrig rigtig brugt det før :(
>
> Det korte af det lange er at jeg har en procedure der henter en fil på
> internettet - og jeg ville gerne at jeg kunne lave noget andet i
programmet
> imens - grundprincippet af proceduren ser sådan ud:
>
> procedure TfrmMain.Hentsenestepatch1Click(Sender: TObject);
> var
> FileOnNet, LocalFileName, path: string;
>
> begin
> path := ExtractFilePath(Application.exename);
> FileOnNet:='Et eller andet sted på nettet';
> path := ExtractFilePath(Application.exename);
> LocalFileName:= path + 'Test.txt';
> if fGetInetFile(FileOnNet,LocalFileName)=True then
> Begin
> MessageDlg('Program hentet'
> +#13+#10+'Du skal genstarte computeren, før programmet er opdateret',
> mtInformation, [mbOK], 0);
> end
> else
> Begin
> ShowMessage('Fejl ved hentning af nyeste version');
> end;
> end;
>
> Nogen der gider forklare mig lidt om det ?
>
> --
> Med venlig hilsen
> Ulrik Vadstrup
>
>



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste