2017-07-28 7 views
1

Ich baue einen TCP-Server mit Indy 10 (von Delphi 2009). In OnExecute-Ereignis muss ich einige Daten aus dem Hauptthread zugreifen. Es ist möglich, diese Daten an den Server-Thread zu übergeben, wenn ich es starte? Der Server wird mit IdTCPServer1.Active:=True; gestartet, so dass ich nicht sehe, wie ich einige Parameter übergeben kann.Wie starte ich Indy TCP Server mit Parametern?

+0

Wenn sich die Daten ändern und Sie einen * Schnappschuss * erstellen möchten, kopieren Sie sie und ihre Referenzdaten, z. durch die benutzerdefinierte 'TIdServerContext' Klasse. – Victoria

+0

Ich habe diese Klasse nicht in meinem Delphi 2009. Ich suchte danach. –

+0

Einheit [IdCustomTCPServer] (https://github.com/graemeg/indy/blob/master/Lib/Core/IdCustomTCPServer.pas#L307). Aber es könnte nicht notwendig sein. Welche Daten möchten Sie an den Ausführungs-Thread übergeben? Was sind die Datentypen? Ändern sie sich, wenn der Server läuft? – Victoria

Antwort

3

Es ist nicht möglich, zusätzliche Parameter an TIdTCPServer zu übergeben. Ihre Server-Event-Handler müssen die Daten bei Bedarf aus dem Hauptthread abrufen.

Um Daten pro Verbindung zwischen Ereignissen zu protokollieren, können Sie die TIdContext.Data-Eigenschaft verwenden oder eine benutzerdefinierte Klasse von TIdServerContext ableiten und sie der TIdTCPServer.ContextClass-Eigenschaft zuweisen. Zum Beispiel kann Ihre OnConnect Event-Handler die neuesten Daten aus dem Haupt-Thread mit TIdSync oder TThread.Synchronize() abrufen, und dann im Kontext für OnExecute zu verwenden.