Показать сообщение отдельно
  #28  
Старый 15.03.2014, 16:57
novashdima novashdima вне форума
Новичок
 
Регистрация: 05.02.2010
Адрес: Украина, Киев
Сообщения: 64
Версия Delphi: XE3, XE4
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Ну конечно же самому.
Ну я так и думал, сделал, все работает, разве что есть вопрос, не лишние ли действия делаю, вот код:
Код:
procedure TForm1.StartProcessClick(Sender: TObject);
begin
  if AnalysThread.Suspended
  then begin
        AnalysThread.SuspendNeeded := False;
        AnalysThread.Resume;
       end
  else begin
        AnalysThread.SuspendNeeded := True;
       end;
end;

procedure TForm1.StopProcessClick(Sender: TObject);
begin
  AnalysThread.Terminate;
  ClearForm;
end;

procedure MyThread.Analys;
begin
  try
   if AnalysThread.Terminated then Exit;
   if AnalysThread.SuspendNeeded then AnalysThread.Suspend;
   CriticalSection.Enter;
   for i := 0 to Form1.ListBox.Count - 1 do
    begin
    if SuspendNeeded then AnalysThread.Suspend;
    .....
  finally
      Synchronize(Form1.ClearForm);
  end;
end;

procedure MyThread.Execute;
begin
  while not Terminated do
  begin
    if SuspendNeeded then Suspend;
    Analys;
  end;
end;

procedure MyThread.SetSuspendNeeded(const Value: LongBool);
begin
  if FSuspendNeeded <> Value then
     InterlockedExchange(LongInt(FSuspendNeeded), LongInt(Value));
end;

procedure MyThread.UpdateGauge;
begin
  if not AnalysThread.Suspended
  then Form1.Gauge.Progress := Position;
end;

procedure MyThread.UpdateMemo;
begin
  if not AnalysThread.Suspended
  then begin
        Form1.Memo.Text := StringList.Text;
        Form1.Memo.Refresh;
       end;
end;
Ответить с цитированием