*angestaubten Thread hochhol*
Hallo,
da mein Anliegen dem Thread sehr ähnlich ist möchte ich keinen Neuen öffnen.
Vorweg: Ich habe bis jetzt noch nicht mit Threads gearbeitet. Ich habe nun schon eine ganze Weile mehrere Foren und Tutorials durchgeguckt aber so richtig klar ist mir das ganze noch nicht. Ich bin mir auch nicht 100%ig sicher, ob ein Thread für mich die richtige Lösung ist, da mein Programmablauf trotzdem sequentiell bleiben soll.
Ausgangssituration:
Ich habe eine Procedure in
Unit A, welche einen Funktion in
Unit B aufruft. Dieser Funktion werden Werte übergeben aufgrund dessen ein Gerät angesteuert wird, welches Messwerte liefert. Diese Messwerte werden dann wieder in den Werten gespeichert. Der Ablauf der Funktion dauert je nach Einstellungen 5-30 Sekunden. In dieser Zeit ist das Hauptprogramm nicht bedienbar. Das ist das Problem. So soll es z.B. auch möglich sein die Messung vorzeitig zu beenden. Ich habe mal versucht den Aufbau auf das nötigste zu beschränken.
Delphi-Quellcode:
unit Main
interface
uses
Data;
{...}
procedure TMain.Messung;
var
FData: TData;
i: integer;
Messzeit: integer;
Messwert: double;
begin
FData := TData.Create;
for i := 0
to 5
do
begin
{Einlesen von Messparametern}
Messzeit := 5;
Messwert := 0;
FData.Messen(Messzeit, Messwert);
{Weiterarbeiten mit wirklicher Messzeit und Messwert}
end;
FreeAndNil(FData);
end;
Delphi-Quellcode:
unit Data
{...}
type
TData =
class
public
function Messen(
var Messzeit: integer;
var Messwert: double): boolean;
end;
Es handelt sich also um eine Funktion mit var-Parametern. Die Schleife in der Main-
Unit soll auch erst weiterlaufen, wenn die funktion "Messen" abgeschlossen ist.
Das ganze muss ich für viele verschiedene Funktionen mit unterschiedlichen Parametern machen. Gibt es da eine Allround-Lösung?
Wenn ich die Funktion als Procedure schreibe und das Beispiel von himitsu in Beitrag #9 verwende erhalte ich folgenden Fehler beim Aufruf von TMyThread.CreateThread(Procedure):
Inkompatible Type: 'TThreadProcedure' und 'procedure, untyped pointer or untyped parameter'
Ich habe auch versucht der Klasse TMyThread die Parameter über Properties vorher zu übergeben, dann den Thread zu starten und später wieder auszulesen. Leider wird der Execute-Abschnitt nicht sofort ausgeführt und meine Schleife läuft bereits weiter, bevor die Werte berechnet wurden.
Die Beispiele im Internet sind leider auch alle sehr allgemein gehalten und viele Dokumente, auf die in Foren verwiesen wurde, existieren nicht mehr.
Ich hoffe Ihr könnt mir einen Denkanstoß geben
Grüße
Headbucket