Trap multithread, złe rozłożenie wątków na rdzenie CPU

0

Witajcie, mam problem z wątkiem, wpadłem w trapa i nie mam pojęcia jak wyjść z niego.
W funkcji

function TCrackMD5Thread.IntGenStr(Value:Cardinal):String;
var Nxt:Cardinal;
begin
  SetLength(Result,0);
  while Value<>0 do begin
   Dec(Value);
   Nxt:=(Value)div(FCharSetLength);
   Result:=FCharSet[Value-FCharSetLength*Nxt]+Result;
   Value:=Nxt;
  end;
end;

jest linijka

Result:=FCharSet[Value-FCharSetLength*Nxt]+Result;

a dokładnie procedura doklejania stringów (String:=String+String) "niszczy wielowątkowość".
Bez niej wątki działają niezależnie na różnych rdzeniach tak jak tego oczekuję, a z nią wszystkie wątki obciążają jeden rdzeń.
Nie rozumiem tego zachowania, bo stworzyłem sobie osobny projekt i w nim wątek, który kleił stringi i działał poprawnie.

Tą funkcję napisał @_13th_Dragon w odpowiedzi jakiegoś usera.

W załączniku są źródła programu.

0

To spróbuj zamienić na Insert: Insert(Result,1,FCharSet[Value-FCharSetLength*Nxt]);

0
Insert(Result, 1, FCharSet[Value-FCharSetLength*Nxt]);

Pomyliłeś kolejność parametrów, ale nie działa xD nie wiem czemu nie klei

Poprawiłem to tak, już klei ale to nie rozwiązało mojego problemu :(
Insert(FCharSet[Value-FCharSetLength*Nxt],Result,1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1