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:
Delphi-Quellcode:
procedure WillBeCalledFromAThread( foo: TFoo );
var
i:Integer;
begin
// ** Im Thread
// Ganz was Aufwändiges berechnen
Sleep( 5000 );
// unser Ergebnis
i := 1;
// Das Ergebnis in der Form anzeigen, das dürfen wir aber nur synchronisiert
TThread.Synchronize( nil,
procedure
begin
// ** Im MainThread
// Berechnung hier?
// Sleep( 5000 ); // <- würde das Programm für den Benutzer für 5 Sekunden blockieren
// also doof, lieber vorher berechnen, da stört es nicht
MyForm.ListBox.Items.Add( IntToStr( i ) );
end);
// ** Im Thread
// nochwas machen?
end;
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)