GetTickCount()函数精确到多少毫秒-.NET教程,面向对象编程
1个回答
展开全部
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等。
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等。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询