-
вот примерчик:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
public
end;
TMyThread = class(TThread)
private
protected
procedure Execute; override;
public
end;
var
Form1: TForm1;
MyThread: TMyThread;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
MyThread := TMyThread.Create(True);
MyThread.FreeOnTerminate := False;
MyThread.Priority := tpLower;
end;
procedure TMyThread.Execute;
var
i: Integer;
begin
for i := 0 to 100 do begin
Form1.Label1.Caption := IntToStr(i);
sleep(100);
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MyThread.Resume
end;
end.
Как по нажатию кнопки перестартовывать поток, начиная счетчик с нуля?
-
И зачем вы выкинула while not Terminated do ? Вот теперь обратно положите. В цикле пишите условие if fReset then OnReset() А в OnReset() обнуляете свой счётчик Counter:=0; Counter положите в объект.
Сеттаре ресета выставляете флаг fReset. Только не забудьте его защитить, так как эта общая переменная доступная из разных потоков.
-
> Как по нажатию кнопки перестартовывать поток, начиная счетчик > с нуля?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
public
end;
TMyThread = class(TThread)
private
Counter: Integer;
protected
procedure Execute; override;
public
procedure OnReset;
end;
var
Form1: TForm1;
MyThread: TMyThread;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
MyThread := TMyThread.Create(True);
MyThread.FreeOnTerminate := False;
MyThread.Priority := tpNormal;
end;
procedure TMyThread.OnReset;
begin
Counter := 0;
end;
procedure TMyThread.Execute;
begin
while not Terminated do begin
while Counter < 100 do begin
Form1.Label1.Caption := IntToStr(Counter);
sleep(100);
Inc(Counter);
end;
end;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
MyThread.OnReset;
MyThread.Resume;
end;
end.
-
> procedure TMyThread.Execute; > begin > while not Terminated do begin > while Counter < 100 do begin > Form1.Label1.Caption := IntToStr(Counter); > sleep(100); > Inc(Counter); > end; > end; > end;
Для вас, Козлов, специально Borland в комментариях пишет:
-
|