Показать сообщение отдельно
  #3  
Старый 17.12.2013, 20:32
mustimur mustimur вне форума
Прохожий
 
Регистрация: 20.11.2013
Сообщения: 17
Версия Delphi: Delphi xe4
Репутация: 10
По умолчанию Код специфичный)))

Цитата:
Сообщение от 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.
Ответить с цитированием