读书人

线程执行一遍的最短时间是多少? 怎么

发布时间: 2012-02-09 18:22:27 作者: rapoo

线程执行一遍的最短时间是多少? 如何加快线程的执行速度?
我做了一个最简单的线程:
procedure TDataProcssor2.Execute;
begin
SetName;
{ Place thread code here }
while not Terminated do
begin
Form1.memo2.Lines.Add('线程周期开始。。。'+ formatdatetime('nn:ss.zzz', now));
Form1.memo2.Lines.Add('线程周期结束。。。'+ formatdatetime('nn:ss.zzz', now));
sleep(1);
end;

end;

每执行一遍 Sleep(1),但结果却大大出乎意料:线程执行过程不点时间,但从线程执行完,到再次进入线程执行之间的时间间隔约为16毫秒,将线程的优先级设为最高效果也一样。

同样使用定时器TTimer,将Interval设置为1,定时器的执行的间隔也约为16毫秒。
---------------------------------------------
我想获得一个更加快速的循环执行过程,用于数据处理,不知道可以使用什么方式,请高手赐教。

[解决办法]
这个问题其实没有意义,假设同样代码的前提下线程执行的时间是要看cpu分配给他的时间片,window线程时间片分配机制中优先级,等待时间以及其他线程等等都可以影响线程执行的时间,从线程执行完到再次进入线程执行之间的时间间隔更是要看windows脸色说话,所以理论上同一个线程两次执行的时间可能也是不同的,而且你举了timer的例子,用那玩意统计时间比线程还不靠谱
[解决办法]
那就别加sleep(1),sleep一次最少睡眠一个时间片,另外你不能直接在线程中操作VCL,会导致出错,输出调试信息可以使用OutputDebugString
[解决办法]
Sleep(1)和Sleep(15)的时间是一样的,Sleep(16)和Sleep(31)的时间是一样的,现在明白了吧.
另外Sleep,SleepEx,SetWaitableTimer,WaitForSingleObject,ZwDelayExecution同样有精度问题

当然Windows还是提供了非常精确的API来使用的,不过一般没那个要求所以很少人使用.

读书人网 >.NET

热点推荐