AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Synchronize und Prozedur mit Parametern

Ein Thema von Sascha L · begonnen am 16. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#1

Synchronize und Prozedur mit Parametern

  Alt 16. Apr 2006, 15:11
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.:
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
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Synchronize und Prozedur mit Parametern

  Alt 16. Apr 2006, 15:20
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Synchronize und Prozedur mit Parametern

  Alt 16. Apr 2006, 15:29
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... )
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Synchronize und Prozedur mit Parametern

  Alt 16. Apr 2006, 15:32
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:10 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