Озаботился изучением потоков. Попытался написать небольшую программу которая бы реализовала мне работу потока.
В поток вынес процедуру, которая по таймеру в статусбаре рисует некое движение.
Но. Во первых совершенно не видно никакого движения, во вторых программа впадает в коматозное состояние.
Подскажите пожалуйста, что и где не так сделано.
К сожалению не прицепляется файл, поэтому прошу простить, что вписал его прямо здесь
- Код: Выделить всё
procedure TFMain.Timer1Timer(Sender: TObject);
begin
label9.Caption := IntToStr(StrToInt(label9.Caption) - 1);
end;
procedure TMyThread.Execute;
begin
Synchronize(@FMain.RepExecuter);
end;
constructor TMyThread.Create(CreateSuspended: boolean);
begin
FreeOnTerminate := true;
inherited Create(CreateSuspended);
end;
procedure TFMain.FormCreate(Sender: TObject);
var d,m,y : word;
i : integer;
begin
DecodeDate(Date, y,m,d);
cbMonth.ItemIndex := m;
MainTimer.Interval := setTimer.Value * 1000;
label9.Caption :='...';
SGListFiles.Cells[0, 0] := UTF8ToSys('Наименование файла');
SGListFiles.Cells[1, 0] := UTF8ToSys('Размер');
end;
procedure TFMain.mainTimerTimer(Sender: TObject);
begin
mainTimer.Enabled := false;
Timer1.Enabled := false;
//создание отдельного потока для выполнения процедуры обработки
MyThread := TMyThread.Create(false);
if Assigned(MyThread.FatalException) then raise MyThread.FatalException;
MyThread.Resume;
//RepExecuter;
label9.Caption := IntToStr(setTimer.Value);
mainTimer.Enabled := true;
Timer1.Enabled := true;
end;
procedure TFMain.CheckBox2Change(Sender: TObject);
begin
cbMonth.Enabled := CheckBox2.Checked;
end;
procedure TFMain.chTimerChange(Sender: TObject);
begin
setTimer.Enabled := not chTimer.Checked;
if chTimer.Checked then begin
MainTimer.Interval := setTimer.Value * 1000;
label9.Caption := IntToStr(setTimer.Value);
end else begin
MainTimer.Interval := 0;
label9.Caption := '...';
end;
MainTimer.Enabled := chTimer.Checked;
Timer1.Enabled := chTimer.Checked;
end;
procedure TFMain.RepExecuter;
begin
//ShowMessage('Work procedure RepExecuter');
while (true) do begin
Sbar.Panels[0].Text:=' \';
Sbar.Panels[0].Text:=' |';
Sbar.Panels[0].Text:=' /';
Sbar.Panels[0].Text:=' -';
end;
end;
Заранее благодарю за помощь.