Thema: Delphi TThread und TObjectList

Einzelnen Beitrag anzeigen

Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#1

TThread und TObjectList

  Alt 10. Feb 2008, 23:18
Hallo,

ich habe ein Problem, welches auch nach langer Recherche im Internet nicht geklärt werden konnte, dass mich zu schaffen macht.

Ich habe folgenden Thread (komplette Unit):
Delphi-Quellcode:
unit uTCalendarThread;

interface

uses
  Classes,Contnrs,StrUtils;

type
  TCDate=class(TObject)
  public
    sCaption:String;
    sStartTime:TDateTime;
    sEndTime:TDateTime;
  end;

  TCalendarThread = class(TThread)
  private

  protected
    procedure Execute; override;
  public
    CDateList:TObjectList;
    constructor Create;
    destructor Destroy;
  end;

implementation

uses SysUtils;

{ TCalendarThread }

constructor TCalendarThread.Create;
begin
  self.CDateList:=TObjectList.Create; //### #Problemstelle# ###
  inherited Create(False);
end;

destructor TCalendarThread.Destroy;
begin
  FreeAndNil(Self.CDateList);
end;

procedure TCalendarThread.Execute;
var s:TCDate;
begin
  while not Terminated do begin
    s:=TCDate.Create; //testobjekt hinzufügen
    CDateList.Clear;
    CDateList.Add(s);
  end;
end;


end.
Beim Erstellen und Starten des Thread (TCalendarThread) erhalte ich eine "Access Violation"-Meldung, solange es ein Programm mit MDI-Form ist.

Aufruf innerhalb der MDI-Form:
Delphi-Quellcode:
var TThTest:TCalendarThread;

[...]

procedure TfrmMain.FormCreate(Sender: TObject);
[...]
   TThTest:=TCalendarThread.Create(false);//Instanz erzeugen und Thread starten
[...]
Sobald ich ein Delphi-Projekt ohne MDI-Fenster erstelle/benutze, funktioniert es tadellos.
Diesen Unterschied konnte ich sicher feststellen, jedoch verstehe ich den Hintergrund nicht bzw. kann keine Lösung entwickeln. Wobei mir das Zweite wichtiger ist.

Ich hoffe, dass jemand mir weiterhelfen kann.
  Mit Zitat antworten Zitat