Цитата:
Сообщение от PhoeniX
Кусок кода сказал бы больше, чем 80% вашего сообщения 
|
Я не думаю что легче будет, но код вот:
Код:
itc:=sedt.Value;// Определяет число параллельный потоков
setlength(ther,itc);
for it := 1 to itc do
begin
ther[it-1]:= Rasch.Create(true); //Rasch - мой класс TThread
ther[it-1].FreeOnTerminate := true;
if it =1 then ther[it-1].kss:=0 else ther[it-1].kss:=(it-1)*(kg mod itc)+1;// определяет с какого элемента считать начать текущему потоку
if it=itc then ther[it-1].ke:=kg else ther[it-1].ke:=(it)*(kg mod itc); // определяет каким элементом закончить счет текущему потоку
ther[it-1].proc:=rasc1; // определяет процедуру для расчета
ther[it-1].start;
end;
enp:=false;
while (enp=false) do //Ожидание окончание всех потоков
begin
enp:=ther[0].Finished;
if itc>1 then for it := 2 to itc do enp:=(enp and ther[it-1].Finished);
end;
Чтобы было понятнее приложу код класса Rasch
Код:
unit Rasc;
interface
uses
System.Classes;
type
ProcRasc = procedure(kstr, kend:integer);
Rasch = class(TThread)
private
{ Private declarations }
public
proc: ProcRasc;
kss,ke: integer;
protected
procedure Execute; override;
end;
implementation
{ Rasch }
procedure Rasch.Execute;
begin
proc(kss,ke);
end;
end.