DELPHI 中的Delay函数,利用GetTickCount和Application.ProcessMessages构建
2016-03-01 10:35
323 查看
作者 关劲松
delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况。因此需要自行编写一个delay函数,以毫秒为单位控制等待时间。
函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。
Application.ProcessMessages; 主要作用使程序在运行时能够响应外界事件。
利用以上两个函数,我们就可以编写出以毫秒为计数单位,好用的delay函数了。在指定时间内,等待异步事件的完成,如串口通信、网口通信、数据库查询返回等操作。
delphi 开发中有些时候需要停留片刻,等待界面输入,或异步操作完成,如果使用sleep函数的话,整个程序都会停顿,界面还会出现冻结的情况。因此需要自行编写一个delay函数,以毫秒为单位控制等待时间。
函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。
Application.ProcessMessages; 主要作用使程序在运行时能够响应外界事件。
利用以上两个函数,我们就可以编写出以毫秒为计数单位,好用的delay函数了。在指定时间内,等待异步事件的完成,如串口通信、网口通信、数据库查询返回等操作。
procedure Delay(msecs:integer); procedure TForm1.Delay(msecs:integer); var Tick: DWord; Event: THandle; begin Event := CreateEvent(nil, False, False, nil); try Tick := GetTickcount + DWord(msecs); while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Application.ProcessMessages; msecs := Tick - GetTickcount; end;finally CloseHandle(Event); end; end;
相关文章推荐
- Android客户端性能优化
- 关于iOS证书提示:此证书签发者无效
- Android轻松画出触摸轨迹
- ActiveX控件安全初始化之一:实现ISafeObject接口(转)
- iOS知识树,知识目录(包括对象、Block、消息转发、GCD、运行时、runloop、动画、Push、KVO、tableview,UIViewController、提交AppStore)
- 使用android studio过程中遇到的异常
- Swift自适应布局(Adaptive Layout)教程(二)
- android动态换肤系列4——从apk文件中获取Resources对象(下)
- Android中自定义水平进度条样式之黑色虚线
- AndroidStudio(2.0 Beta 6) 如何将新建的工程放到GitHub上
- iOS开发推送--客户端 服务端
- 在Android Studio中隐藏标题出现BUG
- Android Fragment嵌套使用存在的一些BUG
- IOS:Swift基本语法
- 解决Android SurfaceView绘制触摸轨迹闪烁问题的方法
- ios推送证书
- 在Android studio下使用git
- Android 记录异常 并重启
- Android学习笔记之java01(更换账号)
- Swift性能探索和优化分析