AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung TAniIndicator stoppt immer beim TIdHTTP.Get
Thema durchsuchen
Ansicht
Themen-Optionen

TAniIndicator stoppt immer beim TIdHTTP.Get

Ein Thema von RWarnecke · begonnen am 22. Mär 2014 · letzter Beitrag vom 23. Mär 2014
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 22. Mär 2014, 20:20
Hallo zusammen,

ich habe in meiner Anwendung einen TAniIndicator. Dieser soll sich drehen, während die Anwendung in einem Thread über die TIdHTTP verschiedene GET-Abfragen macht. Jetzt habe ich nur das Problem, dass jedes mal bei der GET-Abfrage der TAniIndicator stoppt, obwohl ich meiner Meinung nach alles im Thread habe. Wieso wird der TAniIndicator angehalten ? Habe ich vielleicht einen Fehler in meiner TThread-Klasse ?

Als Anhang mal mein kleines Beispielprojekt.
Angehängte Dateien
Dateityp: zip Project4.zip (5,8 KB, 8x aufgerufen)
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

AW: TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 22. Mär 2014, 20:29
Lass den Thread weg, denn es ist total sinnlos, wenn du den Thread startest und das Erste, was du machst, ist die komplette Funktion sofort wieder in den Hauptthread zu synchronisieren, also dort auszuführen.

Lösungen:
- TIdAntiFreeze und eventuell den Thread auch ganz ausbauen.
- Oder den Download wirklich im Thread ausführen und dabei ist es nicht schlecht, wenn die Komponente auch erst im Thread erstellt wird.

PS: Ich hoff' das wird ein iOS/Android-Programm, denn im Windows gibt keiner das IdHTTP_Main frei.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Mär 2014 um 20:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 22. Mär 2014, 20:53
Bei solchen Problemen mit Threads ist es immer das Ergebnis von diesem Vergleich wichtig kurz bevor die langlaufende Funktion ausgeführt wird:
Delphi-Quellcode:
var
  LWillFreezeUI : Boolean;

LWillFreezeUI := MainThreadId = TThread.CurrentThread.ThreadId;
// Jetzt die langlaufende Funktion aufrufen
IdHttp.Get( ... );
Der Wert der Variablen ist dann selbsterklärend
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (22. Mär 2014 um 21:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#4

Der Wert der Variablen ist dann selbsterklärend

  Alt 22. Mär 2014, 21:08
Zitat:
Code:
LWillFreezeUI := ManThreadId = TThread.CurrentThread.ThreadId;
Nur Man?

Wenn schon, dann bitte auch noch Woman, wegen der Antidiskriminierung und so.


Aber ja, wir wissen schon, was du meinst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Der Wert der Variablen ist dann selbsterklärend

  Alt 22. Mär 2014, 21:11
Zitat:
Code:
LWillFreezeUI := ManThreadId = TThread.CurrentThread.ThreadId;
Nur Man?

Wenn schon, dann bitte auch noch Woman, wegen der Antidiskriminierung und so.


Aber ja, wir wissen schon, was du meinst.
Huch, wer hat denn hier den Buchstaben gefressen?

Die schaut ganz unschuldig drein, aber das heißt ja nichts
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

AW: Der Wert der Variablen ist dann selbsterklärend

  Alt 22. Mär 2014, 21:14
Huch, wer hat denn hier den Buchstaben gefressen?
Wenn ich das nur wüsste, aber irgendwer dreht hier an einigen Schräubchen.

Wollte vorhin den Post eigentlich als PN verschicken, aber irgendwer hat mich ins falsche Fenster umgeleitet, glaub ich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 22. Mär 2014, 22:53
- TIdAntiFreeze und eventuell den Thread auch ganz ausbauen.
Unter iOS und Android müssen längere Operationen im Thread ausgeführt werden, deshalb fällt diese Option schon einmal weg. Denn auch mit AntiFreeze kann die GUI zumindest unter Windows noch stocken (unter Android habe ich es noch nie ohne Thread überhaupt ausprobiert).

Aber im Anhang mal ein Beispiel wie es richtig funktioniert. Ob das so am sinnvollsten ist, muss man am konkreten Fall schauen.
Angehängte Dateien
Dateityp: 7z Project4_1.7z (5,2 KB, 32x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 23. Mär 2014, 00:11
TIdAntiFreeze kann auch nicht vorm totalen "Einfrieren" schützen, denn es macht im Grunde nichts Anders, als sich quasi ins TIdHTTP.OnWork reinzuhängen und dort ein Application.ProgressMessages aufzurufen.
OnWork wird nunmal nur beim Empfang von Datenblöcken aufgerufen und wenn der Empfang nun langsam ist oder gar hängt, dann kann das nichts machen, bis ein eventuelles TimeOut die Verbindung trennt oder doch nochmal was rein kommt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

AW: TAniIndicator stoppt immer beim TIdHTTP.Get

  Alt 23. Mär 2014, 18:33
Danke an alle, für die Tipps, einige davon werde ich in meine nächsten Apps mit einfließen lassen. Ich habe es jetzt so gelöst, dass der Thread die ganze Arbeit macht und erst wenn diese Fertig ist, werden die relevanten Daten an den MainThread zurückgegeben.
Rolf Warnecke
App4Mission
  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 11:05 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