![]() |
Synchronize Frage
Heyho zusammen,
ist es wohl möglich eine Funktion über Synchronize aufzurufen die wahlweise Parameter und/oder Rückgabewerte hat, und wenn ja wie mache ich das. Weder im Netz, noch aus der Hilfe habe ich da großartig was zu gefunden. Nur wie ich normale prozeduren mit Synchronize aufrufe. Danke im voraus cu Patrick |
Re: Synchronize Frage
HI,
dafür müsstest du dir deine eigene Variante von Syncronisize erstellen. Du kannst aber auch eine Prozedur machen, die den Funktionsaufruf für dich erledigt und dann die Werte über Eigenschaften zuweist. Bernhard |
Re: Synchronize Frage
Die 2. Möglichkeit habe ich schon ein paar Mal benutzt bisher, das klappt auch, ist mir aber teilweise einfach zu umständlich, bzw. da habe ich dann zu viele globale Eigenschaften.
D.h. dann müsste ich mir sozusagen einen Funktion um die Funktion basteln, richtig? |
Re: Synchronize Frage
Das war bisher die Standardvariante (und auch die einzige)
Andreas Hausladen = jbg hat da mal eine Unit zu geschrieben um das zu vereinfachen ![]() |
Re: Synchronize Frage
Ok, gucke ich mir ma an, sieht aber auf den ersten Blick nich schlecht aus. :)
Danke ;) |
Re: Synchronize Frage
Hi,
du könntest auch einen lokalen Recordtyp definieren und über einen Callback/Event die Werte per Record übergeben. Dann rufst Du im Thread-Context eine Prozedur mit Synchronize(MyProc) auf, die den Record befüllt und die Eventmethode startet. z.B.
Delphi-Quellcode:
Dann eine Procedur im VCL-Threadcontext erstellen, die als OnStatus-Event fungiert. Event zuweisen und lüppt. Prinzip verstanden?
type
TMeinStatus = record Message: WideString; ErrorCode: Integer; end; TMeinStatusEvent = procedure(Status: TMeinStatus) of object; ... TMeinThread = class(TThread) private FStatus: TMeinStatus; FOnStatus: TMeinStatusEvent; ... protected procedure SetStatus; public property OnStatus: TMeinStatus read FOnStatus write FOnStatus; end; ... procedure TMeinThread.SetStatus; begin if Assigned(OnStatus) do FOnStatus(FStatus); end; ... procedure TMeinThread.Execute; begin ... FStatus.Message := 'test'; FStatus.ErrorCode := 0; Synchronize(SetStatus); ... end; Gruß Assertor |
DP-Maintenance
Dieses Thema wurde von "Sharky" von "VCL / WinForms / Controls" nach "Object-Pascal / Delphi-Language" verschoben.
Scheint jetzt weniger mit VCL zu tun zu haben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz