阅读:3456回复:14
如何实现微秒级的线程休眠,求助!!
各位大虾,我在windows 98下,做一个DLL,需要将线程休眠几十微秒,
我现在用Sleep(),但它是毫秒级的,然后我又用QueryPerformanceCounter(),但只能实现延时,如何才能实现微秒级的线程休眠呢?请指教,谢谢!! |
|
|
沙发#
发布于:2004-08-13 08:40
试试KeStallExecutionProcessor函数!
|
|
板凳#
发布于:2004-08-13 10:16
seeseadream,用QueryPerformanceCounter()怎么实现延时呢?谢谢!
|
|
地板#
发布于:2004-08-13 10:34
zsh_7769,看看
http://www.driverdevelop.com/forum/html_74625.html?1092364458 :P |
|
地下室#
发布于:2004-08-15 21:54
不行
|
|
5楼#
发布于:2004-08-18 11:09
for循环,如果不在ondraw函数里面调用的话!
|
|
|
6楼#
发布于:2004-08-18 16:50
用这个试试
void Delay() { LARGE_INTEGER startime,endtime,freq; unsigned int n_delay=0;//微秒 startime = KeQueryPerformanceCounter(&freq); do{ endtime = KeQueryPerformanceCounter(&freq); n_delay = (endtime.QuadPart - startime.QuadPart)*1000000/freq.QuadPart; }while(n_delay<80); } |
|
7楼#
发布于:2004-08-22 21:50
在应用层能实现指定微妙级的延迟吗?
|
|
8楼#
发布于:2004-08-24 14:52
肯定没办法实现微秒级的线程休眠,因为休眠的意思是切换到其他线程,可是一旦进入线程切换,就没办法保证时间了。Windows毕竟不是实时操作系统。
|
|
9楼#
发布于:2004-08-28 15:56
毫秒级的延迟应该可以作到.
|
|
10楼#
发布于:2004-08-31 18:03
毫秒用sleep()就行了
|
|
11楼#
发布于:2004-09-01 10:49
用这个试试 编译通不过。是不是要安装DDK才能编译通过呀? |
|
|
12楼#
发布于:2004-09-02 10:25
使用 for 循环是对的,根据时钟频率算出一条指令的执行时间,然后用循环次数计算出消耗时间即可。
|
|
|
13楼#
发布于:2004-09-04 10:56
sleep的精度是10ms到120ms,依平台而异。
|
|
14楼#
发布于:2004-09-05 08:53
是要DDK呀
|
|