VC实现微秒(十万分之一秒)休眠

 

VC自带的SDK中为我们提供了一个Sleep函数,此函数的最小单位为毫秒(既千分之一秒);但在实际的应该中(特别是网络数据传输)我们需要更小的休眠单位(微秒),而系统又没有提供相关API,那么我们如何实现微秒(既十万分之一秒)的休眠呢?

     我们知道系统中为我们提供了QueryPerformanceFrequency与QueryPerformanceCounter等相关API,而这些API的时间单位都是微秒及的;这为我们实现微秒休眠提供了思路;为了实用起见我们就直接给出函数代码,代码如下:

 

01// lTime----休眠时间(微秒)
02     // bProcessMsg----休眠时是否处理系统消息
03     void MSleep( long lTime, bool bProcessMsg )
04     {
05          LARGE_INTEGER litmp; 
06          LONGLONG QPart1,QPart2;
07          double dfMinus, dfFreq, dfTim, dfSpec; 
08          QueryPerformanceFrequency(&litmp);
09          dfFreq = (double)litmp.QuadPart;
10          QueryPerformanceCounter(&litmp);
11          QPart1 = litmp.QuadPart;
12          dfSpec = 0.000001*lTime;
13  
14          do
15          {
16               if ( bProcessMsg == true )
17               {
18                    MSG msg;
19                    PeekMessage(&msg,NULL,0,0,PM_REMOVE);
20                    TranslateMessage(&msg); 
21                    DispatchMessage(&msg);
22               
23               QueryPerformanceCounter(&litmp);
24               QPart2 = litmp.QuadPart;
25               dfMinus = (double)(QPart2-QPart1);
26               dfTim = dfMinus / dfFreq;
27          }while(dfTim<dfSpec);
28     }

 

 

 

http://www.cnblogs.com/rogee/archive/2011/02/15/1954980.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值