![]() |
Variable übergreifend übergeben
Das ist wahrscheinlich ne ganz dumme Frage, aber ich komme da auf keine Lösung.
Ich übergebe einem Thread Objekt den Wert einer Variablen von meiner Hauptform (create Ereignis überschrieben und darin als Parameter angebeben). Dieser Wert wird im Thread ner globalen Variable zugewiesen und diese im Verlauf geändert. Wie übergebe ich den Wert dann wieder an die Variable im Hauptformular? Ich möchte keine public deklarierten Variablen benutzen! |
Re: Variable übergreifend übergeben
Übergib die Variable nur als Referenz (eh Zeiger drauf).
Der Zugriff sollte Dabei nur mittels TCriticalSection geschehen. Da ich aber nicht genau weis was du genau willst kann ich dir nicht sagen ob das der beste weg ist. |
Re: Variable übergreifend übergeben
Der Thread wird so aufgerufen:
Delphi-Quellcode:
LastClose wird in eine globale Variable in TMBM geschrieben und diese geändert. Wenn der Thread fertig durchlaufen wurde, möchte ich in LastClose wieder den Wert der globalen Variable haben, sonst würde LastClose in der Main Unit ja immer gleich bleiben. Ich brauche also eine Rückgabe des Variablenwertes.
TMBM.Create(LastClose);
|
Re: Variable übergreifend übergeben
Also willst du die Variable nicht Dynamisch ändern, sondern darin das ergebnis Speichern? Quasi wie ne Function!
Dann schick doch den Rückgabewert mittels PostMessage an dein Fenster oder das was ich als erstes geschrieben habe. So, oder Anders? |
Re: Variable übergreifend übergeben
Genau, wie eine function!
Wie geht das denn mit dem Zeiger? |
Re: Variable übergreifend übergeben
Hi Tpercon,
ich hatte mal ähnliches Problem und dies so gelöst:
Delphi-Quellcode:
Hierbei kann natürlich für Value jeder beliebige Typ genutzt werden.type TMyCloseEvent = procedure(Sender : TObject; Value : Integer) of Object; Im Thread dann:
Delphi-Quellcode:
type
TMyThread = class(TThread) . . . private FMyCloseEvent : TMyCloseEvent; public property OnMyClose : TMyCloseEvent read FMyCloseEvent write FMyCloseEvent; end; // im Code MyThread If Assigned(FMyCloseEvent) then FMyCloseEvent(self, Wert); Im Hauptprogramm:
Delphi-Quellcode:
Im Code für die procedure OnThreadClose des Hauptprogramms kann dann in geeigneter Form der Wert Value weiterverarbeitet werden. Durch den Sender bekommt man automatisch auch mit, welcher Thread diesen liefert. Das ist vorallem interessant, wenn man mehrere dieser Threads startet.
// Ereignisse
procedure OnThreadClose(Sender : TObject; Value : Integer); // zum Zeitpunkt Thread-Create MyThread := TMyThread.Create(LastClose); MyThread.OnMyClose := OnThreadClose; Nach diesem Schema hab ich das schon verarbeitet und es funzt super. Gruß oki |
Re: Variable übergreifend übergeben
Oki gibt dir die VCL-Variante von dem Postmassage.
Welche für kleine Datenpackete ausreicht. Möchtestes du aber große komplizierte Datenstrukturen zurückgeben dann sag bescheid. |
Re: Variable übergreifend übergeben
Habe jetzt die Variante von Oki genommen, reicht vollkommen.
Danke euch beiden! |
Re: Variable übergreifend übergeben
@Tpercon: Wenn die Lösung okay ist, wie zu vermuten nach Deiner letzten Aussage, dann setze die Frage bitte auf "beantwortet" (der Link ist oben rechts).
Danke, ...:cat:... |
Re: Variable übergreifend übergeben
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 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