seeseadream
驱动牛犊
驱动牛犊
  • 注册日期2003-10-06
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3456回复:14

如何实现微秒级的线程休眠,求助!!

楼主#
更多 发布于:2004-08-12 21:31
各位大虾,我在windows 98下,做一个DLL,需要将线程休眠几十微秒,
我现在用Sleep(),但它是毫秒级的,然后我又用QueryPerformanceCounter(),但只能实现延时,如何才能实现微秒级的线程休眠呢?请指教,谢谢!!
愿与你分享成功的喜悦、失败的悲哀!
wzxghost
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-13 08:40
试试KeStallExecutionProcessor函数!
zsh_7769
驱动小牛
驱动小牛
  • 注册日期2004-04-15
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-13 10:16
seeseadream,用QueryPerformanceCounter()怎么实现延时呢?谢谢!
wzxghost
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-13 10:34
zsh_7769,看看
http://www.driverdevelop.com/forum/html_74625.html?1092364458 :P
js123
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2008-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-15 21:54
不行
jzydriverdevelo
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2004-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-18 11:09
for循环,如果不在ondraw函数里面调用的话!
我要做驱动了
zsh_7769
驱动小牛
驱动小牛
  • 注册日期2004-04-15
  • 最后登录2005-12-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);
}
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-22 21:50
在应用层能实现指定微妙级的延迟吗?
steven__xu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2013-09-03
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-24 14:52
肯定没办法实现微秒级的线程休眠,因为休眠的意思是切换到其他线程,可是一旦进入线程切换,就没办法保证时间了。Windows毕竟不是实时操作系统。
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-28 15:56
毫秒级的延迟应该可以作到.
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-31 18:03
毫秒用sleep()就行了
z_bing
驱动中牛
驱动中牛
  • 注册日期2002-09-28
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-09-01 10:49
用这个试试
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);
}


编译通不过。是不是要安装DDK才能编译通过呀?
爱国守法,明理诚信,团结一致,战胜非典!
usb_anywhere
驱动小牛
驱动小牛
  • 注册日期2003-07-29
  • 最后登录2005-11-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-02 10:25
使用 for 循环是对的,根据时钟频率算出一条指令的执行时间,然后用循环次数计算出消耗时间即可。
驱网是你们的,也是我们的,归根结底还是大家的!
steven__xu
驱动牛犊
驱动牛犊
  • 注册日期2004-08-24
  • 最后登录2013-09-03
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-09-04 10:56
sleep的精度是10ms到120ms,依平台而异。
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-09-05 08:53
是要DDK呀
游客

返回顶部