Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy - TIdSync (https://www.delphipraxis.net/198173-indy-tidsync.html)

chkaufmann 10. Okt 2018 12:11

Indy - TIdSync
 
Hallo,

mit "Tokyo" erhalte ich die Meldung, dass TIdSync.SynchronizeMethod deprecated sei und man TThread.Synchronize verwenden soll. Wie mache ich das korrekt?

Aus
Code:
TIdSync.SynchronizeMethod(ExecuteSynchronized);
wird
Code:
TThread.Synchronize(nil, ExecuteSynchronized);
ist das ok oder muss ich AThread auch setzen?

Christian

TiGü 10. Okt 2018 12:15

AW: Indy - TIdSync
 
Ist ok, wenn du in den VCL-Mainthread synchronisieren willst.

chkaufmann 10. Okt 2018 12:17

AW: Indy - TIdSync
 
Zitat:

Zitat von TiGü (Beitrag 1415416)
Ist ok, wenn du in den VCL-Mainthread synchronisieren willst.

Das ist nicht so. Ich bin im Kontext eines OnCommandGet Event eines TIdHTTPServer.

Christian

TiGü 10. Okt 2018 12:52

AW: Indy - TIdSync
 
Zitat:

Zitat von chkaufmann (Beitrag 1415419)
Zitat:

Zitat von TiGü (Beitrag 1415416)
Ist ok, wenn du in den VCL-Mainthread synchronisieren willst.

Das ist nicht so. Ich bin im Kontext eines OnCommandGet Event eines TIdHTTPServer.

Christian

Sowas in der Art nahm ich an, aber in welchen Thread möchtest du denn synchronisieren? Wohin?
Wenn es darum geht, irgendetwas in der Oberfläche zu machen (Daten anzeigen etc.) dann ist nil ok, weil dann in den Haupthread synchronisierst.
Sprich ExecuteSynchronized wird im Kontext des Haupthreads ausgeführt.

chkaufmann 10. Okt 2018 12:53

AW: Indy - TIdSync
 
Jetzt habe ich falsch überlegt. Ich will ja gerade in den MainThread synchronisieren. Somit ist nil ok.

Besten Dank.

Christian

himitsu 10. Okt 2018 13:41

AW: Indy - TIdSync
 
Ich glaub der erste Parameter ist eh der Sender und nicht der Empfänger.
(falls dir der Absender bekannt ist, wenn nicht, dann egal)

TThread-Synchronize syncronisert immer nur in den Hauptthread.

Redeemer 10. Okt 2018 17:38

AW: Indy - TIdSync
 
Zitat:

Zitat von himitsu (Beitrag 1415424)
Ich glaub der erste Parameter ist eh der Sender und nicht der Empfänger.

Das ist korrekt. TThread.Synchronize ist einfach nur eine Klassenmethode der gleichnamigen Instanzmethode.
Delphi-Quellcode:
class procedure TThread.Synchronize(AThread: TThread; AMethod: TThreadMethod);
var
  SyncRec: TSynchronizeRecord;
begin
  if AThread <> nil then
    AThread.Synchronize(AMethod)
  else
  // unbekannter Absender
end;


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