Avatar billede rekun Nybegynder
24. marts 2010 - 17:52 Der er 5 kommentarer og
1 løsning

Threads

Hej Eksperter

Jeg har arbejdet lidt med Delphi i nogle år, men jeg er aldrig rigtig gået igang med threads.

Nu står og skal have en idhttp til at tjekke en side hvert 10 sek. Og det får selvfølgelig programmet til at fryse hvergang, så jeg har fundet frem til at der skal laves en thread.

Jeg har fundet nogle guides på nettet, men har ikke rigtig helt fået det til at virke.

Det jeg ønsker at lave en thread(hvordan opretter man den?), der skal laves en idhttp i threaden som tjekker en side. indholdet af det skal så lægges i en string på den oprindelige form.

Hvordan gør jeg det?
Avatar billede kroning Nybegynder
24. marts 2010 - 18:06 #1
Her er lidt kode jeg bruger til at checke for ny program version:

type
  TUpdateCheckThread = class(TThread)
  private
    { Private declarations }
        FHttp : string;
    IdHTTP : TIdHTTP;
  protected
    procedure Execute; override;

  public
      Version : string;
    constructor Create(Http : string);
//    destructor Destroy; override;
  end;

// **************************************************************************************************
{ TUpdateCheckThread }

constructor TUpdateCheckThread.Create(Http : string);
begin
    inherited Create(False);
  FHttp:=Http;
    FreeOnTerminate:=true;
  Version:='Error';
end;

procedure TUpdateCheckThread.Execute;
begin
    try
        IdHTTP:=TIdHTTP.Create(nil);
        IdHTTP.ReadTimeout:=15000;
        IdHTTP.AllowCookies:=false;
        Version:=IdHTTP.Get(FHttp);
    finally
        IdHTTP.Free;
    end;
end;

// **************************************************************************************************
{ THKUpdateCheck }

.
.

Oprettes således i mail form:

TUpdateCheckThread.Create(FHttp).OnTerminate:=UpdateCheckThreadDone;
.
.
procedure THKUpdateCheck.UpdateCheckThreadDone(Sender: TObject);
var
    Version : string;
begin
    Version:=(Sender as TUpdateCheckThread).Version;

  if Version<>'Error' then
.
.

end;
Avatar billede rekun Nybegynder
25. marts 2010 - 07:04 #2
Der skal jeg nok lige have lidt mere hjælp...

Jeg er med på at du laver en public string, som du så vil sætte en værdi på.

Men hvordan oprettes threaden?

Hvis du måske kunne lave et eksempel med en thread som bare laver stringen test := 'indhold'?

Kan desværre ikke rigtig finde rundt i det eksempel du har givet
Avatar billede kroning Nybegynder
25. marts 2010 - 12:48 #3
Her er et fungerende eks. der henter siden www.google.dk hver 10. sekund og smider teksten i en Memo.

Smid en TMemo og en TTimer på en form.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Timer: TTimer;
    procedure TimerTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure HentSideThreadDone(Sender: TObject);
  end;

    THentSideThread = class(TThread)
  private
    { Private declarations }
    FHttp : string;
    IdHTTP : TIdHTTP;
  protected
    procedure Execute; override;

  public
    Indhold : string;
    constructor Create(Http : string);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TUpdateCheckThread }
constructor THentSideThread.Create(Http : string);
begin
    inherited Create(False);
    FreeOnTerminate:=true;
  FHttp:=Http;
  Indhold:='Error';
end;

procedure THentSideThread.Execute;
begin
    try
      IdHTTP:=TIdHTTP.Create(nil);
    IdHTTP.ReadTimeout:=15000;
    IdHTTP.AllowCookies:=false;
    Indhold:=IdHTTP.Get(FHttp);
  finally
      IdHTTP.Free;
  end;
end;
{ THKUpdateCheck }

procedure TForm1.HentSideThreadDone(Sender: TObject);
begin
  Memo1.Lines.Text:=(Sender as THentSideThread).Indhold;
    Timer.Enabled:=true;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
    Timer.Enabled:=false;
    THentSideThread.Create('http://www.google.dk').OnTerminate:=HentSideThreadDone;
end;

end.
Avatar billede kroning Nybegynder
25. marts 2010 - 12:50 #4
Husk at sætter Interval på TTimer til 10000
Avatar billede rekun Nybegynder
25. marts 2010 - 16:28 #5
Det er jo perfekt. smid et svat
Avatar billede kroning Nybegynder
25. marts 2010 - 18:32 #6
Og svar
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