Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe? (https://www.delphipraxis.net/182643-idhttp-onwork-onworkbegin-onworkend-threadsafe.html)

AJ_Oldendorf 6. Nov 2014 15:07

IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
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

Sir Rufo 6. Nov 2014 15:11

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
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.

AJ_Oldendorf 6. Nov 2014 15:13

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
siehe Edit ;-)
Schon klar. Frage hätte ich mir schenken können :-D

Sir Rufo 6. Nov 2014 15:16

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
Zitat:

Zitat von AJ_Oldendorf (Beitrag 1278967)
siehe Edit ;-)
Schon klar. Frage hätte ich mir schenken können :-D

Siehe nochmal mein Edit :)

mjustin 6. Nov 2014 16:44

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
Zitat:

Zitat von AJ_Oldendorf (Beitrag 1278964)
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.

stoxx 6. Nov 2014 19:26

AW: IdHTTP OnWork/OnWorkBegin/OnWorkEnd ThreadSafe?
 
.. irrelevanter eigener Beitrag :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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