|
| 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
>
>
| |
|
|