当前位置:主页>仓库管理软件> 列表

关于定时器Timer的百思不得其解的问题 找win7局域网管理软件

库存管理软件版1楼: 真的很想知道,它到底是怎样的处理机制,是下面第一种还是第二种?
第一种:Timer做完OnTimer事件里的所有处理,然后经过下一个时间间隔,接着再次响应OnTime事件。
第二种:Timer毫不理会OnTimer里做什么事情(可能非常耗时,超过Timer的时间间隔),到时间片就执行一次。
请高手给予回答,多谢!

2楼: 第一种 如管家进销存破解版

3楼: 第一种,用下面的代码可以取证~
self.Edit1.Text:=inttostr(icount);
sleep(5000);
icount:=icount+1;
if icount=10 then
self.Timer1.Enabled:=false;

4楼: Timer做完OnTimer事件里的所有处理,然后经过下一个时间间隔,接着再次响应OnTime事件。

5楼: 第一种,所以讲很多情况下Timer并不是一个理想的应用:(

6楼: 如果是第一种的话,还是比较理想的。因为我觉得大部分人想要这个结果。
如果是第二种,如果处理的事件比较费时,很明显会出现递归问题,这就复杂了。

库存管理软件版7楼: 第一种 我用过 Timer做完OnTimer事件里的所有处理,然后经过下一个时间间隔,接着再次响应OnTime事件

8楼: 第一种,所以如果ontimer里的事情很复杂耗时间的话间隔就不准了

9楼: To lsq1:
我昨天也写了类似的程序进行验证,代码如下:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
label1.Caption := inttostr(strtoint(label1.Caption)+1);
sleep(5000);
label2.Caption := inttostr(strtoint(label2.Caption)+1);
end// 初值:Timer.interval=1000 label1.Caption = 0 label2.Caption = 0
结果发现label1,label2一起加一,本人水平有限,百思不得其解[:(]

10楼: 我也想问关于times的问题!
有没有这样的:用times作个在一段时间里运行代码,如果时间到了还没有运行完就强制退出!

11楼: to dongxiao
sleep(5000)是延迟5S后,程序接着往下执行~~
所以结果是一起加1

12楼: To lsq1:
不对啊,明明是Label1先加的1然后才延迟的。
应该是先看到label1加1,然后过5秒钟后Label2才加一,这才符合常规阿 如win7局域网管理软件

13楼: to dongxiao
在sleep(5000)上面加句self.Refresh;
将有你要的结果
具体的原因可能跟窗体的重画有关系~~

库存管理软件版14楼: 感谢lsq1, 结贴了