AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TStringList-Zuweisung verläuft sich im Nirvana der CPU-Unit
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList-Zuweisung verläuft sich im Nirvana der CPU-Unit

Ein Thema von BAMatze · begonnen am 13. Okt 2009 · letzter Beitrag vom 14. Okt 2009
 
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

TStringList-Zuweisung verläuft sich im Nirvana der CPU-Unit

  Alt 13. Okt 2009, 10:40
Also als AnschlussThread zu diesem Thread scheint es irgendwelche Probleme beim Terminieren des MessThreads zu geben. Hier der wichtige Quellcode:

Delphi-Quellcode:
procedure TForm2.Messung(iMessreihen, iMesswerte, iMessabstand: Integer);
begin
// in der Messung sollen iMessreihen * iMesswerte an Messpunkten aufgenommen, um
// diese später statistisch auszuwerten.
// Dafür Mesthread erstellen, der in regelmäßigen Abständen die entsprechende Anzahl
// an Messwerten aufnimmt.
  FMessThread := TMessThread.create((iMessreihen * iMesswerte), iMessabstand);
  try
    FMessThread.OnMessWertListcompleted := GetMessWertList;
    TempList.Messwertreihen := iMessreihen;
    TempList.Messwertanzahl := iMesswerte;
    FMessThread.WaitFor; // Auf das Ende des Threads warten. Dieser löst die GetMesswertList-Procedure aus
  except
    FMessThread.Free;
  end;
end;

procedure TForm2.GetMesswertList(Sender: TObject{; List: TStringList});
var TempStringList: TStringList;
begin
  TempList.FsLMesswertListe := TStringList.Create;
  try
    TempList.FsLMesswertListe.Assign(FMessThread.MesswertList); // mit dem Debugger komme ich zwar irgendwo in der CPU-Unit an aber der Restliche Quellcode wird nicht mehr bearbeitet. Das Programm bleibt aber funktionstüchtig. Sämtliche Resourcen werden NICHT freigegeben, dies habe ich mit FastMM nachvollzogen.
    Form1.Memo1.Lines.Assign(FMessThread.MesswertList);
  finally
    FMessThread.Free;
    TempList.FsLMesswertListe.Free;
    Form1.Button1.Enabled := true;
  end;
end;

// Der TThread

Type TMessThread = class(TThread)
  private
    FsLMesswertreihe: TStringList;
    FiMessAnzahl, FiMessabstand: integer;
    FCriticalSection: TCriticalSection;
    FOnMessWertListcompleted: TOnMessWertListcompleted;
  protected
    // Ausführung
    procedure Execute; override;
    // Setter und Getter
    // Eventhandling
    procedure DoMessWertListcompleted;
  public
    // Initialisierung und Terminierung
    constructor create(iMessAnzahl, iMessabstand: integer); reintroduce;
    destructor destroy; override;
    property MesswertList: TStringList read FsLMesswertreihe;
    // Events
    property OnMessWertListcompleted: TOnMessWertListcompleted read FOnMessWertListcompleted write FOnMessWertListcompleted;
end;

implementation
uses ControlerBoardForm;

constructor TMessThread.create(iMessAnzahl, iMessabstand: integer);
begin
  inherited create(false);
  FsLMesswertreihe := TStringList.create;
  FOnMessWertListcompleted := nil;
  FiMessAnzahl := iMessAnzahl;
  FiMessabstand := iMessabstand;
end;

destructor TMessThread.Destroy;
begin
  FsLMesswertreihe.Free;
  inherited destroy;
end;

procedure TMessThread.Execute;
var c, i: integer;
begin
  for i := 1 to FiMessAnzahl do
    begin
      c := GetTickcount;
      FsLMesswertreihe.Add(floattostr(Board.anaEingang[1]));
      c := {interval}FiMessabstand - (GetTickCount - c);
      if c > 0 then Sleep(c);
    end;
  doMessWertListcompleted; // Event wird ausgelöst, damit die MesswertListe ausgelesen werden kann.
end;

procedure TMessthread.DoMessWertListcompleted;
begin
  if assigned(FOnMessWertListcompleted) then FOnMessWertListcompleted(Self{, FsLMesswertreihe});
end;

end.
Warum wird der Rest der GetMesswertList-Procedure nicht abgearbeitet?

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
 


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 07:12 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