Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Synchronize und Prozedur mit Parametern (https://www.delphipraxis.net/67545-synchronize-und-prozedur-mit-parametern.html)

Sascha L 16. Apr 2006 14:11


Synchronize und Prozedur mit Parametern
 
Hallo,

habe folgendes Problem:

Ich möchte die Caption zweier Labels ständig aus einem Thread heraus ändern. Soetwas sollte man ja mit Synchronize machen.

Das Problem ist aber, dass das gar nicht in einer extra Prozedur auslagern kann. Wenn ich eine Prozedur schreibe, die den Captions neue Werte zuweist, dann muss ich diese neuen Werte ja irgendwo herbekommen. Vorzugsweise als Parameter, da globale Variablen in diesem Fall irgendwie bekloppt wären.

Es ist aber dann nicht mehr möglich diese Prozedure mit Synchronize aufzurufen.

Also z.B.:
Delphi-Quellcode:
Synchronize(UpdateProzedure(text:string));
ist nicht möglich. Da meckert Delphi jedes Mal zu Recht, dass es keine überladene Version von Synchronize gibt.

Wie kann ich das Problem dennoch lösen, denn ansonsten kann man ja die Synchronize-Funktion überhaupt nicht nutzen, außer man verwendet immer globale Variablen, was ich in meinem Fall aber bescheuert finde, da in der Prozedure, die später Synchronize aufruft der Wert erst ermittelt wird. D.h. ich müsste dann erst diesen Wert einer globalen Variable zuordnen, anstatt sie direkt der Update-Prozedure als Parameter zu übergeben.

Viele Grüße und frohe Ostern!
Sascha

SirThornberry 16. Apr 2006 14:20

Re: Synchronize und Prozedur mit Parametern
 
globale Variablen sind fast das Stichwort. Und zwar kannst du variablen aus dem Private dafür nutzen.
Delphi-Quellcode:
type
  TYourThread = class(TThread)
  private
    fCaptionValue: String;
    [...]
  end;
implementation
 
procedure TYourThread.SyncProc;
begin
  FormXY.ProcedureMitParameter(fCaptionValue);
end;

procedure TYourThread.Execute;
begin
  [...]
  fCaptionValue := 'Das was übermittelt werden soll';
  SyncProc;
  [...]
end;
eine weitere Möglichkeit wäre das du den String icht als Parameter mit gibst sondern in der Syncronisierten Methode vom Thread abfragst (YourThread.DerTolleString)

Sascha L 16. Apr 2006 14:29

Re: Synchronize und Prozedur mit Parametern
 
Also das ist definitiv die einzige Möglichkeit?

Dachte mir nur, dass es irgendwie "unperformant" ist. Denn es kann beispielsweise vorkommen, dass die Captions ca. 10.000 mal in 2 Minuten geändert werden. (ja das kann man mit dem Auge eh nicht so wirklich erkennen... :D )

SirThornberry 16. Apr 2006 14:32

Re: Synchronize und Prozedur mit Parametern
 
wenn du den String als Parameter übergibst wird er genau so im Speicher hinn und her geschoben also kommt das so ziemlich aufs gleiche heraus. Deswegen auch noch die Mögichkeit den String vom Thread abzufragen um das zu spaaren. Genauso kannst du den String als "const" übergeben umd die performance bissl zu steigern.
Eine andere Möglichkeit kenn ich nicht. Wenn du dich damit befasst wie das Syncronisieren funktioniert wirst du sehen das die art der Parameterübergabe nicht viel anders Realisierbar ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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