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?