AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Das FreeOnTerminate ist nicht nötig, da es im Constructor des TAnonymousThread schon auf true gesetzt wird.
Delphi-Quellcode:
Man könnte aber auch das FreeOnTerminate auf false setzen und eine Warteschleife (ähnlich dem Delay) anhängen, welche auf den Thread wartet, aber die GUI sich aktualisieren läßt.
TThread.CreateAnonymousThread(procedure
begin ... end).Start; // oder TAnonymousThread.Create(procedure begin ... end).Start; Die anonymen Methoden können sogar Variablen hin und her verwalten.
Delphi-Quellcode:
Und das Schöne, man sieht hier sogar direkt den Programmablauf, was sich aber eher nur für kurze Methoden eignet, also für längeren Code sollte man besser eine getrennte Prozedur/Methode übergeben.
proedure Test;
var xyz: string; begin xyz := 'abc'; TThread.CreateAnonymousThread(procedure var i: Integer; begin for i := 0 to 29 do begin xyz := xyz + IntToStr(i mod 10); Sleep(1000); end; TThread.Synchronize(nil, procedure begin ShowMessage(xyz); end; end).Start; end; |
AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Zitat:
Das ist ja in der Klassenfunktion TThread.CreateAnonymousThread drin. |
AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Das ist eine anonyme Methode. :zwinker:
Sie wird einfach an Ort und Stelle deklariert, wo man sie verwenden will. Die gibt es seit Delphi 2009. (genauer, seitdem es die Generics gibt) - Unicode - Record-Methoden (schau dir z.B. mal TRect an) - Record-Operatoren - Generics - anonyme Methoden - ... Es gab halt in letzer Zeit einige Neuerungen. :angle: Der Parameter des CreateAnonymousThread/Create wurde als
Delphi-Quellcode:
deklariert, womit man dort alles mögliche übergeben kann.
procedure of
Delphi-Quellcode:
type
TMyProcedure = procedure; // nimmt nur Prozeduren auf TMyMethod = procedure of object; // nimmt nur Methoden auf TMyAnonymus = reference to procedure; // nimmt alles auf (dahinter versteckt sich ein geheimes generisches Interface) |
AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Zitat:
|
AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Zitat:
Meine Frage bezog sich auch nicht auf die Anonyme Methode welche Du übergibst sondern:
Delphi-Quellcode:
ist ja eine Klassenfunktion und da ist auch alles o.k.
TThread.CreateAnonymousThread()
Du hast aber geschrieben es gehe auch:
Delphi-Quellcode:
Und dies kann ich meinem Delphi XE2 Upd3 nicht beibringen. Du schon?
TAnonymousThread.Create()
|
AW: Showmessage oder auch Form.showmodal verschwindet manchmal hinter Form
Arg, ich hatte mich verguckt.
Delphi-Quellcode:
Nur daß mal wieder jemand auf die saublöde Idee gekommen ist und diese Klasse versteckt in der Implementation deklariert hat. :wall:
class function TThread.CreateAnonymousThread(const ThreadProc: TProc): TThread;
begin Result := TAnonymousThread.Create(ThreadProc); end; Haben die noch nie was von Vererbung gehört und daß es eventuell jemanden geben könnte, der davon mal ableiten wöllte? Eine Funktion wie CreateAnonymousThread hatte ich mir ja schon vorher (bevor die mir die Idee geklaut hatten), selbst implementiert. (RunAsThread) Nja, ich hätte da eher noch die die edde gehabt, für eine Wartefunktion, aber egal, häng ich die halt via Class-Helper an TThread dran. (CreateAnonymousThreadAndWait) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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