Einzelnen Beitrag anzeigen

LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: IdHTTP Get im Thread sofort unterbrechen?

  Alt 1. Jan 2018, 16:03
Einen Cancelbefehl gibt es nicht.
Das hier führt auch nicht zum Erfolg. Es dauert immer circa 19 Sekunden bis das Programm beendet wird.

Delphi-Quellcode:
type
 THTTPObject = class(TIdHTTP)

 private
  FCanceled: Boolean;
  IOHndl: TIdSSLIOHandlerSocketOpenSSL;
  procedure FOnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
 public
  constructor Create(AOwner: TComponent);
  destructor Destroy; override;

 published
  property Canceled: Boolean read FCanceled write FCanceled;
 end;

implementation

constructor THTTPObject.Create(AOwner: TComponent);
begin
 inherited;

 FCanceled := False;
 IOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 Request.BasicAuthentication := True;
 HandleRedirects := False;
 IOHandler := IOHndl;
 ReadTimeout := 10000;

 OnWork := FOnWork;
end;

procedure THTTPObject.FOnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
 if FCanceled then
  begin
   raise Exception.Create('Disconnect');

   Disconnect;
  end;
end;
Delphi-Quellcode:
aHTTP.Canceled := True;
_Thread.Terminate; // Wird respektiert: "einen Thread kann/darf man niemals von außen "beenden". Man muß immer dem Thread, bzw. dem Code darin, sagen, dass er sich beenden soll."

Geändert von LTE5 ( 1. Jan 2018 um 16:06 Uhr)
  Mit Zitat antworten Zitat