AGB  ·  Datenschutz  ·  Impressum  







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

TThread blockiert Hauptfenster

Ein Thema von manuel · begonnen am 1. Mär 2004 · letzter Beitrag vom 1. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#1

TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 09:56
Hi Leute,

ich weiss, das ist die x-te Frage zu diesem Thema,
aber irgendwie hab ichs noch nicht so ganz gebacken bekommen:

Ich habe mit idFTP einen mickrigen FTP Client geschrieben und
die Anweisungen zu downloaden eines Files in einen Thread (TThread) gepackt.

Das Problem ist jetzt, dass der abgespaltete Thread das Hauptfenster blockiert.
Die Threadpriorität habe ich testweise sogar auf "idle" gesetzt. Ohne Erfolg.

idFTP liefert nach jedem empfangenen IP-Paket löst ein OnWork Event aus.
selbst wenn ich in einem passenden Event-Handler den Thread unterbreche, die
notwendigen felder aktuallisiere und dann den Thread fortsetzte, bleibt das Fenster eingefroren, bis der Thread beendet ist.

Folgende Lösung habe ich bereits gefunden:
die AntiFreeze-Compo von Indy.
Das kann meiner meinung nach aber nicht der Weisheit letzter Schluss sein.
Threads sollen das Hauptprogramm ja entlasten und nicht blockieren.

Für Ideen und Anregungen wäre ich dankbar.

Gruß

manuel

[edit=sakura] Bevor Du wieder nachfragst, warte erst einmal ca. 24 Stunden. Innerhalb dieser Zeit wird i.A. jemand antworten. Mfg, sakura[/edit]
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 11:24
Lies bitte meine Anmerkung im ersten Beitrag

Zitat von manuel:
Folgende Lösung habe ich bereits gefunden:
die AntiFreeze-Compo von Indy.
Das kann meiner meinung nach aber nicht der Weisheit letzter Schluss sein.
Threads sollen das Hauptprogramm ja entlasten und nicht blockieren.
Erkläre mal, wie Du das meinst. IdAntiFreeze macht doch genau das, was Du willst. Es lagert die "Waits" aus, um so den Hauptthread zu entlasten und nicht zu blockieren...

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#3

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 11:32
@Sakura:
Ok das warten werd ich mir fürs nächste mal merken

Sicher, idAntiFreeze erledigt genau das gewünschte. Ich kann mir aber nicht vorstellen, dass das der sinnvollste weg ist.
Wenn ich in Java Threads programmiere, dann blockieren die sich auch nicht gegenseitig. Ich dachte in Delphi wäre das genauso.

Aber wenn du sagst, dass es nicht so ist, dann werd ich die AntiFreeze-Komponente nutzen. Dachte nur, es gäbe eine elegantere Lösung...

ciao
manuel
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 11:38
Eigentlich sollte es mit normalen Threads auch gehen - hatte den Teil nicht gleich korrekt verstanden Dazu sollten sich hier eigentlich auch Beispiele finden lassen. Wie dem auch sei, da Du eh schon die Komponenten nutzt, ist TIdAntiFreeze sogar das eleganteste im Sinne: der geringste Aufwand mit dem größtmöglichen Nutzen

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#5

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 11:44
Die "normalen" nonVCL Threads hab ich nicht genutzt.
In die muss ich mich erst noch einarbeiten.

Dann werde ich wohl bei der AntiFreeze Compo bleiben.
Hat mich halt nur gewundert, dass es sich so verhält, wie es sich verhält.

Vielen Dank für die schnelle Antwort

manuel
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 12:53
Wie hast du denn Synchronize aufgerufen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#7

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 13:25
Gibts da unterschiede beim aufrufen von Synchronize?

Delphi-Quellcode:

procedure TDownloadThread.Execute;
begin
  { Place thread code here }
  self.Priority:=tplower;
  Synchronize(load);
end;

procedure TDownloadThread.load;
begin
progress_form.lbl_file.Caption:=filename_dest;
//auf mainform befindet sich die TidFTP-Komponente
mainform.FTP1.Get(filename_source, filename_dest, true);

end;
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 13:27
Zitat von Luckie:
Wie hast du denn Synchronize aufgerufen?
Erst dachte ich, was soll die Frage... aber nun

Ja, solange die Methode Load über Synchronize aufgerufen wird, blockiert diese den Hauptthread und dadurch blockierst Du die Anwendung, da Du in der Methode den Download durchführst Soweit habe ich nicht gedacht.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#9

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 13:32
Hallo manuel!

- das tut ja weh!

Du läßt die ganze Arbeit im Syncronize erledigen. Syncronize verlagert aber die Arbeit in den Haupt-Thread! Dann brauchst Du keine Threads.

Wenn ein Thread was auf dem Bildschirm ausgeben soll, ist Syncronize nötig. Sonst kommen sich die einzelnen Threads in die Quere - die VCL ist nunmal nicht Thread-sicher. Die Produktion niemals im Synchronize ablaufen lassen!

Gruß

Dietmar Brüggendiek

Edit: Die Katze war schneller - klar, Katzen sind schneller als Menschen
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#10

Re: TThread blockiert Hauptfenster

  Alt 1. Mär 2004, 13:35
Da hätte ich eigentlich auch sebst drauf kommen können.
Liegt ja auf der Hand, wenn die Kompo aufm Hauptformular liegt.
Das heisst, ich muss alles im Thread selbst erledigen.

@Brüggendiek

Tja, das kommt davon wenn man nicht ganz fit in Delphi ist, und dann anfängt zu tippen ohne an die Eigenheiten zu denken..
Mein Fehler

Vielen Dank für die Hilfe...

manuel
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:53 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