Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#12

AW: Thread startet execute nicht

  Alt 24. Mai 2013, 15:19
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;
  Mit Zitat antworten Zitat