阅读:6096回复:30
VC中如何实现微秒级延时?
比如需要等待15微秒后做一件事情,该怎么办?
|
|
|
沙发#
发布于:2004-08-03 13:11
这可能吗? 关注!
|
|
板凳#
发布于:2004-08-03 13:26
应用程做不到微秒级,最少能到1ms,而且不太准,我试过
|
|
|
地板#
发布于:2004-08-03 17:02
应用程做不到微秒级,最少能到1ms,而且不太准,我试过 驱动就可以做到吗? |
|
地下室#
发布于:2004-08-03 19:01
驱动可能做到,驱动定时的分辨率为100ns
|
|
|
5楼#
发布于:2004-08-04 09:54
驱动可能做到,驱动定时的分辨率为100ns 怎么做? 说一下思路 :) |
|
6楼#
发布于:2004-08-04 11:37
The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists.
BOOL QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency // address of current frequency ); Parameters lpFrequency Pointer to a variable that the function sets, in counts per second, to the current performance-counter frequency. If the installed hardware does not support a high-resolution performance counter, this parameter can be to zero. Return Values If the installed hardware supports a high-resolution performance counter, the return value is nonzero. If the installed hardware does not support a high-resolution performance counter, the return value is zero 不用驱动也可以做到 取得的记时单位是最小的时钟周期 |
|
|
7楼#
发布于:2004-08-04 11:38
这是PC系统最精确的时间单位了
不可能有更小的时间粒度 |
|
|
8楼#
发布于:2004-08-04 13:47
:)
不错,顶 |
|
9楼#
发布于:2004-08-04 14:14
这样得到的是系统可以分辨的最小时间间隔。但要做成定时器,那是另一回事。
即使你循环的调用QueryPerformanceCounter来取时间,也要考虑函数的执行周期。如果在AP里,还有考虑线程的调度时间。 个人认为在AP里是不大可能的。 |
|
10楼#
发布于:2004-08-06 12:47
比如需要等待15微秒后做一件事情,该怎么办? 等待的这段时间需要调度去做别的任务吗? 如果需要应该不太现实。 如果不需要,可上使用 void Delay(ULONG xMs) { LARGE_INTEGER llStart ; LARGE_INTEGER llEnd ; LARGE_INTEGER llFreq ; KeQueryPerformanceCounter(&llFreq ) ; llFreq.QuadPart = llFreq.QuadPart*xMs/1000 ; KeQuerySystemTime(&llStart) ; do KeQuerySystemTime(&llEnd) ; while((llEnd.QuadPart-llStart.QuadPart)<llFreq.QuadPart) ; } ________________________________________________________ 回答的好请给分 |
|
|
11楼#
发布于:2004-08-06 15:12
不调度别的任务,这样就可以了。非常感谢您提供的例子! 不过编译不过去。系统提示: 'QuerySystemTime' : undeclared identifier 不知这个系统函数究竟该怎样写? |
|
|
12楼#
发布于:2004-08-06 17:33
KeQuerySystemTime在ntddk.h中声明的有。 不过MSDN上说,只能达到10毫秒的精度。
|
|
13楼#
发布于:2004-08-06 17:58
AllenZh:用KeQueryPerformanceCounter循环怎么样? 据说它是取CPU内部的滴答计数器。可能循环的时候CPU接近于停顿 :D。 不过既然要求只延时15微秒,影响应该不会太大吧?
唉~~ 要是有个这样的中断就好了。 :o |
|
14楼#
发布于:2004-08-07 11:18
反复调用KeQueryPerformanceCounter系统资源耗的很多
|
|
15楼#
发布于:2004-08-09 09:12
KeQuerySystemTime在ntddk.h中声明的有。 不过MSDN上说,只能达到10毫秒的精度。 也就是说我必须安装“DDK”? |
|
|
16楼#
发布于:2004-08-10 08:50
AP里可以用QueryPerformanceCounter 或者 timeGetSystemTime。 具体用法请查MSDN吧。 :) GOOD LUCK!
|
|
17楼#
发布于:2004-08-13 10:14
z_bing问题解决了吗?我也在用这个例子,但还不清楚该怎么样去精确控制延时时间,还有那几个变量和参数你赋了什么值呢?
能帮忙讲一下吗?谢谢! |
|
18楼#
发布于:2004-08-13 10:18
z_bing问题解决了吗?我也在用这个例子,但还不清楚该怎么样去精确控制延时时间,还有那几个变量和参数你赋了什么值呢? 没有解决。就这一个函数(QueryPerformanceFrequency)编译通过。其余的都没通过。 |
|
|
19楼#
发布于:2004-08-13 10:24
你明白KeQueryPerformanceCounter和KeQuerySystemTime这两个函数该怎么使用了吗?我看了msdn上的说明,但还是不太清楚该怎么用?请多多指教!
|
|
上一页
下一页