Forum: Object-Pascal / Delphi-Language
by Sir Rufo,
29. Jun 2016
Das passiert ja auch alles threaded, aber wenn du dieses schöne Nebeneinander wieder durch eine Synchronisierung in ein Hintereinander presst, dann hat es sich eben mit dem Nebeneinander erledigt.
Hier ein kleines Minimal-Beispiel:
procedure WillBeCalledFromAThread( foo: TFoo );
var
i:Integer;
begin
// ** Im Thread
Forum: Object-Pascal / Delphi-Language
by Sir Rufo,
29. Jun 2016
Warum willst du die Auswertung synchronisiert vornehmen?
Die Ausgabe an die Controls muss synchronisiert erfolgen, die Auswertung, etc. eher nicht (das ist da wurscht) bzw. eher hinderlich, weil jetzt jeder Empfangsthread den MainThread sehr lange blockiert und dann stehen sich alle auf den Füßen rum.
Stell dir vor du bist der Chef und deine Mitarbeiter bearbeiten emails. Es darf immer nur...
Forum: Object-Pascal / Delphi-Language
by Sir Rufo,
29. Jun 2016
Ein simples Beispiel wäre z.B. das hier:
procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
var i:Integer;
Buffer:TIDBytes;
Settings:TMySettings;
begin
TThread.Synchronize( nil,
Forum: Object-Pascal / Delphi-Language
by Sir Rufo,
29. Jun 2016
Erst mal in die Doku schauen TThread.Synchronize / TThread.Queue, das sollte die Frage beantworten.
Forum: Object-Pascal / Delphi-Language
by Sir Rufo,
29. Jun 2016
Also Ja :stupid:
Du darfst auf die Controls nur im MainThread zugreifen. Also benötigst du minimum eine TThread.Synchronize oder TThread.Queue