Цитата:
Сообщение от 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;