资源预览内容
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
如何在如何在 BCB 中实现延时中实现延时(不依赖机器的速度不依赖机器的速度)因为 Sleep 的作用是把当前线程转为休眠状态(暂时失去 CPU 资源)一段时间,而不是仅仅“延时”。所以,你的程序在使用 Sleep 后,整个线程,包括消息循环都没有执行的机会。在 GUI 主线程里面要慎重使用这个函数,因为整个界面都会被“Sleep”。你可以使用 Timer,或者自己在循环里面判断时间流逝,同时使用 Application-ProcessMessages(),以保证消息队列的及时处理。Sleep( )的缺点是延时时,不再响应消息,若时间较长,象死了一样,所以,我常用: 用两个 GetTickCount( )函数相减得到时钟数,void delay(unsigned int n); / 延长 n 毫秒 int t0=GetTickCount( ); while (GetTickCount()-t0ProcessMessages(); / 响应消息 本文主要介绍了分别用 TTtimer 控件,Sleep 函数,GetTickCount 函数来实现延时的方法:1)TTtimer 控件TTtimer 控件的实质是调用 Windows API 定时函数 SetTimer 和 KillTimer 来实现的,并简化了对 WM_TIMER 消息的处理过程。通过设置 OnTimer 事件和 Interval 属性,我们可以很方便的产生一些简单的定时事件。2)Sleep 函数Sleep 函数用来使程序的执行延时给定的时间值。Sleep 的调用形式为 Sleep(milliseconds),暂停当前的进程 milliseconds 毫秒。Sleep 的实现方法其实也是调用 Windows API 的 Sleep 函数。例如:sleep(1000); /延迟 1000 毫秒Sleep 会引起程序停滞,如果你延迟的时间较长的话,你的程序将不能够响应延时期间的发生的其他消息,所以程序看起来好像暂时死机。3)GetTickCount 函数在主程序中延时,为了达到延时和响应消息这两个目的,GetTickCount()构成的循环就是一种广为流传的方法。例如:procedure Delay(MSecs: Longint);/延时函数,MSecs 单位为毫秒(千分之 1 秒)varFirstTickCount, Now: Longint;beginFirstTickCount := GetTickCount();repeatApplication.ProcessMessages;Now := GetTickCount();until (Now - FirstTickCount = MSecs) or (Now FirstTickCount);end;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号