AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
Thema durchsuchen
Ansicht
Themen-Optionen

IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

Ein Thema von AJ_Oldendorf · begonnen am 6. Nov 2014 · letzter Beitrag vom 6. Nov 2014
Antwort Antwort
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#1

IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 16:07
Hallo zusammen,
ich habe einen Thread, der beinhaltet eine Komponente TIdHTTP.
Der Thread bekommt eine Datei mitgeteilt, die runtergeladen werden soll und die TIdHTTP Komponente kümmert sich darum.
Ich würde gerne den Forschritt irgendwo anzeigen (z.B. Progressbar).
Meine Frage ist nur, sind die Events für den Forschritt ThreadSafe?

Delphi-Quellcode:
procedure OnIdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
procedure OnIdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
procedure OnIdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
Oder soll ich bei den Events über einen Timer entkoppeln bzw. Synchronize nutzen?

Viele Grüße
Alex

Edit:
Vergesst die Frage. Natürlich muss ich es entkoppeltn oder über Synchronize machen wenn ich aus dem Thread auf die VCL zugreifen will. Hat ja nix mit Threadsafe zu tun...
Hat sich also erledigt

Geändert von AJ_Oldendorf ( 6. Nov 2014 um 16:11 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
 
#2

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 16:11
Die Frage lässt sich immer ganz simpel selber beantworten:
Delphi-Quellcode:
if MainThreadID = TThread.CurrentThread.ThreadID then
  // ohne Sync
else
  // mit Sync


PS: Da bei den Indys oft auch noch Threads innerhalb benutzt werden, kann man es da niemals mit Bestimmtheit sagen (ohne den Code auseinanderzunehmen), ob die Events im Kontext des aufrufenden Threads erfolgen oder schon synchronisiert. Darum im Zweifelsfall immer vor dem Synchronize prüfen.
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 ( 6. Nov 2014 um 16:16 Uhr)
  Mit Zitat antworten Zitat
AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#3

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 16:13
siehe Edit
Schon klar. Frage hätte ich mir schenken können
  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
 
#4

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 16:16
siehe Edit
Schon klar. Frage hätte ich mir schenken können
Siehe nochmal mein Edit
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
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 17:44
Natürlich muss ich es entkoppeltn oder über Synchronize machen wenn ich aus dem Thread auf die VCL zugreifen will
Eine Alternative zu Synchronize wäre noch TThread.Queue(<anonyme Methode die auf UI zugreift>);

Im Unterschied zu Synchronize ist TThread.Queue nicht blockierend, der Thread wird 'sofort' fortgesetzt.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?

  Alt 6. Nov 2014, 20:26
.. irrelevanter eigener Beitrag
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 21:31 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