写了个线程,每隔一秒显示一个数字(每次加一),但不完美
写了个线程,每隔一秒显示一个数字(从0开始,每次加一)。但是发现,有时候会不显示,之后就跳过了这个数字。比如:正常情况下,会从1顺序地显示到8,但是应该显示9的时候,屏幕为空白,之后却显示10了;还有种情况,显示的时候突然为粗体显示,之后又恢复了,我并没有改变过字体字号!
效果图:

我现在把代码全部贴上,请高人帮忙看看错在哪,谢谢!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,DateUtils;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyThread = class(TThread)
private
{ Private declarations }
FOwner: TForm;
FLastAutoCMDTime: TDateTime;
protected
procedure Execute; override;
public
constructor Create(Owner: TForm); virtual;
end;
var
Form1: TForm1;
FThread:TmyThread ;
FLastAutoCMDTime: TDateTime;
fval:longint ;
implementation
{$R *.dfm}
constructor TMyThread.Create(Owner: TForm);
begin
inherited Create(False);
FOwner := Owner;
FLastAutoCMDTime := Now;
fval:=0 ;
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
if MilliSecondsBetween(Now, FLastAutoCMDTime) > 1000 then //每隔1秒
begin
FLastAutoCMDTime := Now;
inc(fval) ;
Tform1(FOwner).Label1.Caption:=inttostr(fval) ;
end ;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FThread<>nil then
begin
FThread.Terminate;
FThread.WaitFor;
FThread.Free;
end ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FThread:=TMyThread.Create(form1) ;
end;
end.
效果图:

我现在把代码全部贴上,请高人帮忙看看错在哪,谢谢!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,DateUtils;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyThread = class(TThread)
private
{ Private declarations }
FOwner: TForm;
FLastAutoCMDTime: TDateTime;
protected
procedure Execute; override;
public
constructor Create(Owner: TForm); virtual;
end;
var
Form1: TForm1;
FThread:TmyThread ;
FLastAutoCMDTime: TDateTime;
fval:longint ;
implementation
{$R *.dfm}
constructor TMyThread.Create(Owner: TForm);
begin
inherited Create(False);
FOwner := Owner;
FLastAutoCMDTime := Now;
fval:=0 ;
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
if MilliSecondsBetween(Now, FLastAutoCMDTime) > 1000 then //每隔1秒
begin
FLastAutoCMDTime := Now;
inc(fval) ;
Tform1(FOwner).Label1.Caption:=inttostr(fval) ;
end ;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FThread<>nil then
begin
FThread.Terminate;
FThread.WaitFor;
FThread.Free;
end ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FThread:=TMyThread.Create(form1) ;
end;
end.
...全文
相关推荐
js实现多张图片每隔一秒切换一张图片
本文实例为大家分享了js实现多张图片每隔一秒切换图片的具体代码,供大家参考,具体内容如下 <head> <meta charset="UTF-8"> <title></title> [removed][removed] </head> <body style="background-color: pink"> <div id="carousel" style="border:1px solid #000000; float:left; width
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
下面小编就为大家带来一篇用js实现每隔一秒刷新时间的实例(含年月日时分秒)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Time类实现程序加一秒
时间类 实现时间加一秒程序。 time.h..... time.cpp...
JS填写银行卡号每隔4位数字加一个空格
主要介绍了JS填写银行卡号每隔4位数字加一个空格的相关资料,需要的朋友可以参考下
lcm1602显示每秒加一
89c51单片机lcm1602显示每秒加一protues仿真



