AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Programm hängt trotz Indy Antifreeze und Threadauslagerung
Thema durchsuchen
Ansicht
Themen-Optionen

Programm hängt trotz Indy Antifreeze und Threadauslagerung

Ein Thema von amigage · begonnen am 14. Dez 2012 · letzter Beitrag vom 18. Dez 2012
 
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#1

Programm hängt trotz Indy Antifreeze und Threadauslagerung

  Alt 14. Dez 2012, 14:06
Hallo liebe Delphi-Gemeinde,

ich hoffe, ihr könnt mir bei meinem spezifischen Problem helfen. Ich habe mich auch schon im Forum belesen,
leider habe ich keine Lösung finden können, die mein Problem löst.

Einfach gesagt, habe ich eine Form mit einem Ausgabe- und einem Eingabefeld.

Wenn die Form angezeigt wird, wird in der Prozedur  procedure AfterFormShow(var Msg: TMessage); message WM_AFTER_SHOW; der Cursor in das Eingabefeld gestellt und im Hintergrund in einem Thread eine HTTP-Abfrage duchgeführt.
Leider hängt das Programm trotz Auslagerung in einen Thread, weil die Indy-Komponente blockt.
Während auf die Antwort von FHTTP.get() gwartet wird, kann ich nicht sehen, was ich in das Eingabefeld eingebe. Das Fenster wird nicht aktualisiert.

Erst nach Ende der HTTP-Abfrage geht es. Selbst die globale Variable GAntiFreeze hilft mir nicht weiter.

Delphi-Quellcode:
type

  TMyThread = class(TThread)
  private
    TtmpKey : String;
    TtmpSecret: String;

    procedure ThisIsMyFunction;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;

  

{ TMyThread }

constructor TMyThread.Create(CreateSuspended: Boolean);
begin
  inherited;
end;

procedure TMyThread.ThisIsMyFunction;
  result_str : String;
begin
// ...

        result_str := GetFileInfo('', true);
// ...
end;

procedure TMyThread.Execute;
begin
  Synchronize(ThisIsMyFunction);
end;

....

Delphi-Quellcode:
procedure TMainDlg.AfterFormShow(var Msg: TMessage);
var
    DBThread: TMyThread;
begin
  editInput.Setfocus;
  Application.Processmessages;

  DBThread := TMyThread.Create(true);
  try
    DBThread.FreeOnTerminate := True;
    DBThread.Resume;
  except
  end;
  
end;
  

function TMainDlg.GetFileInfo(RemotePath: string; allFiles: boolean = false): String;
var
  listAllFiles : String;
  HTTPURL : String;
const
  FRoot = ''http://www.meinewebseite.de/';
begin
    If GAntiFreeze = NIL then
       GAntiFreeze.Create(nil);
     try
      GAntiFreeze.Active := true;

      HTTPURL := Format(url_metadata, [FRoot, URLEncodeRemotePath(RemotePath)]);
      try
        Result := FHTTP.Get(HTTPURL + '?' + OAuthRequest.GetString);
      except
         on E: EIdSocketError do
            begin
              Result := HTTPURL + SLineBreak + E.Message;
            end;
         on E: EIdHTTPProtocolException do
            begin
              Result := E.ErrorMessage;
            end;
      end;
    finally
      FHTTP.Disconnect;
      if Assigned(FHTTP.IOHandler) then FHTTP.IOHandler.InputBuffer.Clear;
      If Assigned(GAntiFreeze) then FreeAndNil(GAntiFreeze);
    end;

end;

Hätte noch jemand einen Tipp? Habe ich den separaten Thread falsch aufgebaut?

Danke für jede Hilfe.
  Mit Zitat antworten Zitat
 


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 21:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz