线程速度控制问题(200分)

  • 主题发起人 主题发起人 Toysun
  • 开始时间 开始时间
T

Toysun

Unregistered / Unconfirmed
GUEST, unregistred user!
某个线程的代码段如下
var
t:dword;
i:Integer;
begin
i:=0;
t:=gettickcount;
while not self.Terminateddo
begin
if gettickcount-t<1 then
continue;
t:=GetTickCount;
inc(i);
end;
end;
理论上看,一秒内是否变量i的数值应该增加1000?
但我的执行结果是64左右;而去掉限制
var
i:Integer;
begin
i:=0;
while not self.Terminateddo
begin
inc(i);
end;
end;
这样执行的话每秒变化几万次。
我的问题是:有办法有效控制线程执行速度吗?怎么做呢?
 
要精确的控制执行速度很难,因为Windows不是实时系统,不太精确可以用sleep来控制
 
哎!知道现成的原理就可以了!
既然是现成,旧有优先级,并非每时每刻读在执行你的现成,所以时间控制最好用sleep,也只能是接近你的理想数值! 还有一个方法,用主现时钟成控制现成的挂起和执行!
 
sleep等 是走时间片的 95 是 win98 的时间片 还长
你要 用多媒体时钟
 
你直接用 timeSetEvent
或者
你用 TMMTimer
都可以
 

Similar threads

S
回复
0
查看
906
SUNSTONE的Delphi笔记
S
S
回复
0
查看
884
SUNSTONE的Delphi笔记
S
后退
顶部