Mein Delphi warnt, compiliert aber und hält am Breakpoint in der TCheckThread.execute-Methode an.
Code:
[DCC Warnung] Unit4.pas() H2365 Schreibweise der Überschreibe-Methode TCheckThread.execute muss exakt ihrem Vorfahren TThread.Execute entsprechen
Also wirklich helfen tut davon nichts.
Was hast du den davon überprüft, ich bin weiterhin der Meinung das der Fehler in dieser Richtung zu suchen ist.
Die Struktur deiner Daten scheint mir für den Anwendungsfall ungeeignet.
Durch geschickte Optimierung könnte man den Ablauf sicher um den Faktor 100 beschleunigen.
Das ist sinnvoller als bei diesem Entwicklungsstand bereits auf Threads zu setzen.
Auf jeden Fall solltest du auf "Goto" verzichten.
Ein Vorschlag ohne jetzt zu viel zu verändern:
Delphi-Quellcode:
function TCheckThread.IncCountArray(var countarray: tcountarray) : Boolean;
var
n: Integer;
begin
for n := 15 downto 0 do
begin
countarray[n] := countarray[n] + 1;
if countarray[n] < Length(Freforgestringarray[n]) then
begin
Result := True;
Exit;
end;
countarray[n] := 0;
end;
Result := False;
end;
function TCheckThread.IsCountArrayValid(const countarray: tcountarray) : Boolean;
var
n: Integer;
begin
for n := 15 downto 0 do
begin
if countarray[n] >= Length(Freforgestringarray[n]) then
begin
Result := False;
Exit;
end;
end;
Result := True;
end;
procedure TCheckThread.getbestreforgeid;
var
q:integer;
currentstring:string;
countarray:tcountarray;
points:integer;
oldpoints:integer;
oldresult:string;
begin
oldpoints := 0;
oldresult := '00000000000000000000000000000000';
countarray := Fstartcountarray;
if IsCountArrayValid(countarray) then
begin
repeat
currentstring:='';
for q := 0 to 15 do
currentstring := currentstring + Freforgestringarray[q][countarray[q]];
//showmessage(currentstring);
//memo2.Lines.Add(currentstring);
points := calcpoints(currentstring);
if oldpoints < points then
begin
oldpoints := points;
oldresult := currentstring;
end;
if currentstring=Fendstring then
Break;
//form1.Memo2.Lines.Add('shortmessage');
until not IncCountArray(countarray);
end;
//form1.Memo2.lines.Add('thread done says thread '+inttostr(Fresultpoints));
//showmessage('thread done says thread '+inttostr(Fresultpoints));
resultpoints := oldpoints;
resultstring := oldresult;
end;
procedure TCheckThread.Execute;
begin
//Fresultpoints:=0;
//showmessage('thread started '+Fendstring);
getbestreforgeid;
threaddone:=true;
//form1.Memo2.Lines.Add('thread done says thread '+inttostr(Fresultpoints));
end;