Einzelnen Beitrag anzeigen

Murkas

Registriert seit: 22. Mai 2013
11 Beiträge
 
#1

Thread startet execute nicht

  Alt 22. Mai 2013, 16:30
Delphi-Version: 7
Hallo zusammen,

Ich befasse mich nun seit einiger Zeit mit Delphi und habe mich nun an Multithreading probiert. Das heist ich habe mir wie in diversen Anleitungen beschrieben eine neue TCheckThread Klasse von TThread abgeleitet und sie angepasst. Über das Hauptformular rufe ich nun meinen TCheckThread in 1 bis mehreren Instanzen mit verschiedenen Parametern über TCheckThread.Create auf. Genau dort kommt es zum Problem: Der Thread beginnt nicht zu arbeiten.

Hier ein paar Quellcode Ausschnitte

Code:
[...]
type
  TCheckThread = class(TThread)
  private
    Fstartcountarray:unit1.tcountarray;
    Fendstring:string;
    Freforgestringarray:unit1.treforgestringarray;
    Fthreaddone:boolean;
    Fresultstring:string;
    Fresultpoints:integer;
  protected
    function getstatname(statid:integer):string;
    function calcpoints(calcablestring:string):integer;
    procedure getbestreforgeid;
    procedure execute; override;
  public
    constructor Create(startcountarray:tcountarray; endstring:string; reforgestringarray:treforgestringarray);
    property threaddone:boolean read Fthreaddone write Fthreaddone;
    property resultstring:string read Fresultstring write Fresultstring;
    property resultpoints:integer read Fresultpoints write Fresultpoints;
  end;

implementation

constructor TCheckThread.Create(startcountarray:tcountarray; endstring:string; reforgestringarray:treforgestringarray);
var i:integer;
begin
  inherited Create(true);
  Fthreaddone:=false;
  for i:=0 to 15 do Fstartcountarray[i]:=startcountarray[i];
  Fendstring:=endstring;
  Fresultpoints:=0;
  freforgestringarray:=reforgestringarray;
  Freeonterminate:=false;
  self.Resume;
end;

[...]

procedure TCheckThread.execute;
begin
form1.Memo2.Lines.Add('getbestreforgeid starting');
getbestreforgeid;
end;

[...]
(Hinweis: getbestreforgeid: in dieser Prozedur wird der beste Wert zwischen Start- und Endwert ermittelt und in Fresultstring geschrieben. Am Ende wird Fthreaddone auf true gesetzt, sodass die Werte über das Hauptformular ausgelesen werden.)

Aufgerufen wird der Thread dann in einer andren Unit:

Code:
calcthread[q]:=tcheckthread.Create(countarray,endstring,reforgestringarray);
Der gesamte TCheckThread.execute wird vom Compiler weg optimiert, Ich habe schon einiges versucht, dazu aber keine Lösung gefunden. Hat irgendjemand eine Idee dazu?
  Mit Zitat antworten Zitat