GetTickCount()函数精确到多少毫秒-.NET教程,面向对象编程

 我来答
大盗失良机580
推荐于2016-06-18 · 超过53用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:122万
展开全部
private sub delaytime(byval delaynum as long)
dim starttime as double, tmptime as single
starttime = timegettimedotmptime = timegettime
if tmptime < starttime then starttime = tmptime
水平: 中级(王辉)
虽然timegettime返回值的单位是1ms,但实际上它的精度只有10ms左右。
如果想提高精度,可以使用queryperformancecounter和queryperformancefrequency。这两个函数不是在每个系统中都支持。对于支持它们的系统中,可以获得低于1ms的精度。windows 内部有一个精度非常高的定时器, 精度在微秒级, 但不同的系统这个定时器的频率不同, 这个频率与硬件和操作系统都可能有关。利用 api 函数 queryperformancefrequency 可以得到这个定时器的频率。利用 api 函数 queryperformancecounter 可以得到定时器的当前值。根据要延时的时间和定时器的频率, 可以算出要延时的时间定时器经过的周期数。在循环里用 queryperformancecounter 不停的读出定时器值, 一直到经过了指定周期数再结束循环, 就达到了高精度延时的目的。例如:
private declare function queryperformancecounter lib "kernel32" (lpperformancecount as currency) as long
private declare function queryperformancefrequency lib "kernel32" (lpfrequency as currency) as long
delaynum为延时的毫秒数
private sub delaytime(byval delaynum as long)
dim ctr1, ctr2, freq as currency
dim count as double
if queryperformancefrequency(freq) then
queryperformancecounter ctr1doqueryperformancecounter ctr2
loop while (ctr2 - ctr1) / freq * 1000 < delaynumelsemsgbox "不支持高精度计数器!"end ifend sub不过,windows不是实时操作系统,如果任务太多,或者有其他中断请求,都可能导致程序运行时的延迟不精确,一般的windows程序也可以接受。如果你对时间精度要求很高,一般只有使用windows的实时扩展rtx,或者使用其他实时操作系统,如vxworks等。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式