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.