Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Thread und TIDHTTP (https://www.delphipraxis.net/164156-thread-und-tidhttp.html)

stiftII 31. Okt 2011 13:11

Thread und TIDHTTP
 
Hallo,

ich bekomme bei folgendem Code eine Access Violation.
Code:
procedure TProxyCheck.Execute;
var
  pcheck: TIdHTTP;
begin
  pcheck := TidHttp.create(nil);  
end;
Der Code wird in einem Thread ausgeführt.

Woran kann das liegen ?

Grüße
stiftII

Bummi 31. Okt 2011 13:29

AW: Thread und TIDHTTP
 
sicher dass der Code an dieser Stelle auftritt, ist der Thread erzeugt worden?

stiftII 31. Okt 2011 13:52

AW: Thread und TIDHTTP
 
Danke für die schnelle Antwort.

Der Fehler war tatsächlich nicht an der Stelle...


Code:
TProxyCheck = class(TThread)
temp:string;
    protected
      procedure start;
      procedure stop;
      procedure execute;
  end;
Code:
  temp := '';
hat im Thread wohl den Fehler ausgelöst.

Warum ist eine solche Zuweisung im execute Thread ungültig ? geht sowas nur über den constructor ?

Bummi 31. Okt 2011 13:56

AW: Thread und TIDHTTP
 
ist zwar ein seltsamer Eintrag, mach bei mir aber wenn wie beschrieben eingefügt keinen Ärger...
weil ich schon ewig mit den Indy's nicht mehr gemacht habe hab ich mir den Spass gemacht ...
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TCallBack = Procedure(Const Content:String) of object;
  TTestThread=Class(TThread)
  Private
    FS:String;
    FCallBack:TCallBack;
    procedure Showtext;
  public
    constructor Create( CreateSuspended : Boolean;CallBack:TCallBack );overload;
    destructor Destroy; override;
    Procedure Execute; override;
  End;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    procedure CallBack(const s: String);

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.CallBack(Const s:String);
begin
  Memo1.Lines.Add(s)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    TTestThread.Create(false,CallBack);
end;

{ TTestThread }



constructor TTestThread.Create(CreateSuspended: Boolean;CallBack:TCallBack);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := true;
  FCallBack := CallBack;
end;

destructor TTestThread.Destroy;
begin

  inherited;
end;

procedure TTestThread.Showtext;
begin
 if Assigned(FCallBack) then FCallBack(FS);
end;

procedure TTestThread.Execute;
var
IdHTTP1 : TIdHTTP;
ss:TStringStream;
begin
  inherited;
    ss:=TStringStream.Create;
    IdHTTP1:= TIdHTTP.Create(nil);
    try
    IdHTTP1.Get('http://www.google.de',ss);
    ss.Position := 0;
    FS := ss.ReadString(ss.Size);
    Synchronize(Showtext);
    finally
      ss.Free;
      IdHTTP1.Free;
    end;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz