关于for循环延时(0分)

  • 主题发起人 主题发起人 partisan
  • 开始时间 开始时间
P

partisan

Unregistered / Unconfirmed
GUEST, unregistred user!
前几天有人问是否能用for循环延时,我说如果只是延时的话,就是说<br>程序除了延时啥也不干的话,可以用sleep,结果有人说不好,有人说<br>一旦用for循环延时,其他程序就只有等死。我觉得这个说法不对,<br>首先,如果程序仅仅为了延时,是可以用sleep(sleepex更好一些)<br>的,而且肯定比for循环好。因为sleep以后,本线程便不再占用CPU<br>时间了,知道sleep时间到。而用for循环的话,CPU时间片是仍然要占用<br>的。另外,即使用for循环,也不会让别的程序死掉,因为在WIN32里,<br>系统调度是抢先式的,就是说时间片一到(或者悠闲级高的线程需要执行)<br>系统就会中断该线程,转向另外的线程。所以for循环只会使本线程停止<br>消息响应,而不会使别的程序死掉,除非是Win16<br>
 
你说得很对
 
你作个长的for循环试试看,你说的是否完整?<br>另外你必须承认不同机器的for循环执行时间不同,那么这个for循环有什么意义?!
 
請試試這個方法<br><br><br>procedure delay(msec:integer);<br>var<br>&nbsp;firsttick : integer;<br>begin<br>&nbsp; firsttick := gettickcount;<br><br>&nbsp; repeat<br>&nbsp; &nbsp; application.processmessages;<br>&nbsp; until ((gettickcount-firsttick) &gt;= msec);<br>end;<br><br>var<br>&nbsp;i:integer;<br>begin<br>&nbsp;for i:=1 to 10000 do delay (500); // delay 500ms<br>end;
 
jolios的方法的确可以用,但如果遇到两台机器性能差别太大的情况,就有明显的差别了!<br>就如王亮所说的!
 
难道Delphi没有Timer吗?<br>或者有没有DoEvents<br>(From VB)
 
接受答案了.
 
我也想知有没更好的方法,procedure delay(msec:integer);函数 CPU 占用太利害了。<br><br>
 
后退
顶部