Ein generelles Problem...
Es gibt im Hauptthread keine Procedure Execute_Modal_In_Thread;. Wie himitsu schon geschrieben hat...
Ein
Delphi-Quellcode:
Procedure Button1Click(Sender : TObject);
begin
MachWaslangesImThread;
IchWarteHiersolangenonBlocking;
end;
Geht leider nicht...
Alle Repeat Processmessages Until Konstrukte verbraten nur mehr CPU-Zeit, als wenn man es direkt im UI-Thread erledigt hätten.
Also die Logik umbauen auf.
Delphi-Quellcode:
Procedure Button1Click(Sender : TObject);
begin
ShowWait;
MachWaslangesImThreadAsync(Procedure (Data : TData)
begin
IcharbeitemitdemErgebnis(Data);
HideWait;
end);
end;
Wird zwar dadurch nicht schneller, aber die Oberfläche bleibt reaktiv.
Multithreading lohnt sich "eigentlich" nur da, wo der User nicht unbedingt auf ein Ergebnis wartet.
Beispiel (Schönwetter Code, wie Bernd sagen würde) :
Delphi-Quellcode:
Procedure SaveButton(Sender : TObject);
begin
SaveButton.Enabled := false;
TTask.Run(Procedure
begin
SpeicherdieDaten;
TThread.Queue(NIL,Procedure
begin
ShowFlyInMessage('Daten gespeichert');
SaveButton.Enabled := true;
end;
end);
end;
Nur mal so als Anregungen.
Mavarik