Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datenaustausch zwischen einer Methode und einem Programm (https://www.delphipraxis.net/6901-datenaustausch-zwischen-einer-methode-und-einem-programm.html)

Chewie 26. Jul 2003 18:31


Datenaustausch zwischen einer Methode und einem Programm
 
Ich habe gerade folgendes Problem:
Ich habe eine Methode, die u.a. die Dateien eines Verzeichnisses (inkl. Unterverzeichnisse, rekursiv) ermittelt. Und ich will den Fortschritt irgendwie (wahrscheinlich in einer Progressbar) darstellen. Da ich weder die rekursive Struktur aufheben will( und deswegen keine DoFirst/DoNext - Variante möglich ist) noch die Ausgabe in der Progressbar in die Klasse integrieren will, frage ich mich, wie ich am besten der Progressbar sage, dass sie ihre Position ändern soll.

Was ich favoriere, wäre, der Dateiscan-Methode einen Zeiger auf die Funktion/Prozedur, die die Progressbar verwaltet, zu übergeben, und die Funktion dann aufzurufen. Da der Datei-Scan Algo aber in einem seperaten Thread ablaufen soll, weiß ich nicht, ob es da probleme geben kann. Auch bin ich mir nicht ganz darüber im klaren, wie ich an die Prozedur, deren Zeiger ich hab, Parameter übergeben kann.

Wär super, wenn mir jemand helfen könnte.

MSCH 27. Jul 2003 13:35

Re: Datenaustausch zwischen einer Methode und einem Programm
 
Via Thread auf ein VCL Objekt zugreifen geht nur über die Synchronize() Methode des Threads.
Eine Übergabe von Parametern von Functionen könnte so laufen:

Code:
type
  TmyNewProc = procedure (max, position:Integer);
...
  myThread= Class(TThread)
    Proc: TmyNewProc; // nur Pointer !
    constructor Create(.., varTmyNewProc: TmyNewProc,..)
  ...

im Hauptprogramm Thread.Create(..) mit Procedure übergeben

constructor myThread.Create;
begin
  ...
  Proc:= varTmyNewProc;
  ...
end;

procedure myThread.Execute;
begin
  ...
  Synchronize(test);
  ...
end;

procedure MyThread.Test;
...
  Proc(80,8);
...
so aus'm Gedächtniss.


Übergebe dem Thread doch direkt die Progressbar. In der Execute() dass die Progressbar direkt aus dem Thread (Synchronize) aktualisieren.


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