AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads - IdHTTP.Post sendet nicht

Ein Thema von Kolan · begonnen am 25. Mär 2009
Antwort Antwort
Kolan

Registriert seit: 25. Mär 2009
1 Beiträge
 
#1

Threads - IdHTTP.Post sendet nicht

  Alt 25. Mär 2009, 10:13
Hello World...

Nach langer Zeit der "Abstinenz" darf ich mal wieder was mit Delphi machen und hab natürlich direkt ein Problem mit einer Datei-Uploadfunktion, die ich in einen Tread auslagern möchte.

Allgemeine Programminfo:
Ein paar Dateien werden gepackt, in einen Memorystream geladen und zusammen mit einer Ziel-URL im thread.create übergeben.
Da Threads für mich auch nicht alltäglich waren hab ich mich erstmal an das hier im Forum oft genannte Tutorial gehalten, nun aber das Problem, dass der Thread scheinbar korrekt ausgeführt wird, sich jedoch am Post des IdHTTP ohne Meldung aufhängt.

Wäre schön, wenn sich das jemand anschauen und mir weiterhelfen könnte - ich geh sehr stark davon aus, dass ich irgendeinen blöden Anfängerfehler gemacht habe

Start des Threads:
Delphi-Quellcode:
[...]
    mstream := TMemoryStream.Create;
    mstream.LoadFromFile('data.zip');
    mstream.Position := 0;

    PostData := TIdMultiPartFormDataStream.Create;
    PostData.AddObject('data', 'zip', mstream, 'data.zip');

// IdHTTP1.Post(url_upload, PostData);
// Problemloses Senden der Daten ohne Thread, jedoch "einfrieren" der Application

    SendThread := TSendThread.Create(url_upload, PostData);
[...]
und hier der (VCL) Thread selber:
Delphi-Quellcode:
unit Unit4;

interface

uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF},
  IdMultiPartFormData, IdHTTP, IdComponent, Unit1;

type
  TSendThread = class(TThread)
    st_url,
    st_status : String;
    st_progress,
    st_size : Integer;
    st_data : TIdMultiPartFormDataStream;
    st_http : TidHTTP;
  private
  protected
    procedure Execute; override;
    procedure Sync;
  public
    constructor Create(url : String; data : TIdMultiPartFormDataStream);
  end;

implementation

{ SendThread }

procedure TSendThread.Sync;
begin
  Form1.Sync_SendThread(st_status, st_progress);
// sleep(3000);
end;


constructor TSendThread.Create(url : String; data : TIdMultiPartFormDataStream);
begin
  st_http := TIdHTTP.Create(nil);

  st_url := url;
  st_data := TIdMultiPartFormDataStream.Create;
  st_data := data;

  st_status := 'Ready';
  Synchronize(Sync);

  inherited Create(false);
end;

procedure TSendThread.Execute;
begin
  st_status := 'starting...';
  Synchronize(Sync);

  sleep(2000);

  st_http.Post(st_url, st_data);

  st_status := 'sent';
  Synchronize(Sync);
end;

end.
Zu erwähnen wäre hier vielleicht noch, dass im Execute das st_status + Synchronize nicht mehr ausgeführt wird. Ohne das sleep würde der Thread sich beim st_http.Post direkt beenden, mit dem sleep seh ich wenigstens im Process Explorer dass er erstellt wird und sich kurz darauf wieder schliesst.

Besten Dank schonmal vorab

[edit - typos]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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