说到程序中的延时,你会想到怎么做,新开一个线程?如果我的程序只用单线程,
却又想让函数等上10秒才返回值,而且还不能像使用Sleep函数那样不能处理其它消息呢?
我在这里把论坛里能见到的几种延时方式总结一下。
-------------------------------------------------------------------------------
从陌生人的处理方式说起,这是延时中时间跨度最大的,单位至少在秒以上:
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=195559
见过不只一个人问起过。
其实估计陌生人是直接手写的这段代码,不是从程序段中copy出来的,有一些手误,大家自己调整一下就行了
#include
COleDateTime  start_time = COleDateTime::GetCurrentTime(); 
COleDateTimeSpan  end_time = COleDateTime::GetCurrentTime() - start_time; 
while(end_time.GetTotalSeconds()  <=  2) 
{    
MSG  msg;    
GetMessage(&msg,NULL,0,0);   
TranslateMessage(&msg);   
DispatchMessage(&msg);   
end_time = COleDateTime::GetCurrentTime() - start_time; 
}
注意到我把原文中的 PreTranslateMessage(&msg);
替换为了: TranslateMessage(&msg);  DispatchMessage(&msg);
原因是,可以不仅仅在MFC中使用,而且 PreTranslateMessage有局限性,而且可能会造成线程消息阻塞。       
还有一点说明,因为COleDateTimeSpan类的成员函数还有:GetTotalMinutes、GetTotalHours、GetTotalDays,
能够实现更大时间段的延时。
-----------------------------------------------------------------------
往更小的时间跨度上说,执行毫秒级的延时用GetTickCount就行:
DWORD dwStart = GetTickCount();DWORD dwEnd = dwStart;
do{   
MSG  msg;    
GetMessage(&msg,NULL,0,0);     
TranslateMessage(&msg);   
DispatchMessage(&msg);   
dwEnd = GetTickCount(); 
} while((dwEnd - dwStart)  <=  2000);
--------------------------------------------------------------------
然后是微秒级延时:
LARGE_INTEGER  litmp ;
LONGLONG  QPart1,QPart2 ;
double d=0;
QueryPerformanceCounter(&litmp) ; // 获得初始值QPart1 = litmp.QuadPart ;while (d<40)//你想要的时间{    QueryPerformanceCounter(&litmp) ;    
QPart2 = litmp.QuadPart ;   
d=(double)(QPart2 - QPart1);
}
出处:http://community.csdn.net/Expert/TopicView1.asp?id=2663023。
未做修改,如果需要微秒级的延时中也处理消息,请参照前例修改。
最后,如果还不能满足,那就去做时钟周期的延时吧:
#define NOP_COUNT 3//需要自己根据NOP及LOOP的指令周期计算.__asm
{  MOV ECX, NOP_COUNTDELAY: NOP  LOOP DELAY }
不过,用VC做这个工作是不是有点……

VC函数中的延时操作相关推荐

  1. VC++编程中的文件操作API和CFile类

    VC++编程中的文件操作API和CFile类 在VC编程中,操作文件的方法主要有两种:利用API函数和MFC的CFile类.微软在其中封装了文件的一般操作,下面我就介绍一下如何利用这两种方法实现文件操 ...

  2. python update函数会调用哪些内置函数_Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容...

    Python字典的内置函数中没有 append()操作,可以用 update()来更新字典内容 答:√ 在同一代昭穆的兄弟中,以年岁序位. 答:对 <舆服志>主要描写了唐代的流行服饰样式, ...

  3. 开发中避免延时操作技巧详解

    这篇文章主要为大家介绍了开发中避免延时操作技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 前言 开发中我们或多或少会涉及到一些场景需要使用延时操作,而延时操作其实 ...

  4. Kafka科普系列 | 轻松理解Kafka中的延时操作

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-delay-operation/ 本文起源于之前去面试的一道面试题,面试题大 ...

  5. 计算发送延时与传播延迟_Kafka科普系列 | 轻松理解Kafka中的延时操作

    作者:朱小厮 来源:公众号朱小厮的博客 本文起源于之前去面试的一道面试题,面试题大致上是这样的:消费者去Kafka里拉去消息,但是目前Kafka中又没有新的消息可以提供,那么Kafka会如何处理? 如 ...

  6. WPF 延时操作实现 --- Application.DoEvents()

    WPF 延时操作实现 - Application.DoEvents() 如果是在Winform中,我们可以这样实现 sleep延时方法: System.Threading.Thread.Sleep(1 ...

  7. Kafka原理--时间轮(延时操作)

    原文网址:Kafka原理--时间轮(延时操作)_IT利刃出鞘的博客-CSDN博客 简介 说明         本文介绍Kafka的时间轮的原理. Kafka没有延迟队列功能供用户使用,本文介绍的延时操 ...

  8. python中延时函数_Python延时操作实现方法示例

    本文实例讲述了Python延时操作实现方法.分享给大家供大家参考,具体如下: 在日常的开发中,往往会遇到这样的需求,需要某一个函数在一段时间之后才执行以达到某种特定的效果.此时,我们就需要某种机制,使 ...

  9. linux内核的延时函数,linux中内核延时函数 (转)

    第一类延时函数原型是:(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsi ...

最新文章

  1. java webservice序列化_java – 可以用CXF生成可序列化的类吗?
  2. 从 Android 静音看正确的查bug的姿势?
  3. 【408预推免复习】计算机组成原理之系统总线
  4. explain分析执行计划
  5. 让你成为有钱一族的黄金理财法则?
  6. 如何确定h.264的码率
  7. Jupyter Notebook——Windows平台上中如何切换虚拟环境
  8. python怎么编写流氓软件_Python 编写强制性流氓软件, 可表白, 可其它!
  9. GitHub 10分钟教程
  10. IATF16949认证辅导,FMEA和CP的顾客额外批准,对供应链安全的管理(适用时)
  11. C++多线程传参详解
  12. 大健康产业B2B2C多用户电商平台开发,开启数字化消费新蓝海
  13. 鸿蒙系统手机电脑互传文件,【中兴GrandS评测】手机、电脑、好友文件自由互传-中关村在线...
  14. 榆熙电商:带你了解一下拼多多先用后付的知识
  15. 计算机专业学生的自我介绍英语翻译,英语学生自我介绍,大学生自我介绍带翻译?...
  16. 开源库和开源代码源码
  17. Kepware里一些特殊驱动说明
  18. docker 构建tomcat镜像部署war包
  19. 社区以及办公楼宇将“刷脸”作为门禁首选
  20. 提供曲库、评分、修音功能的K歌SDK-Android版本

热门文章

  1. BENET上海分公司网络改造项目设计实施方案(S1项目实践)
  2. CentOS 5.2 安装Apache服务器后无法访问解决方法
  3. android 按钮带图标 阴影_android中带图标的按钮(ImageButton)怎么用
  4. Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对比
  5. 代码质量管理工具】——sonar
  6. Oracle下的Databse,Instance,Schemas
  7. 老年人计算机应用基础,国开电大老年心理健康作业一参考答案
  8. scala方法中的变量_Scala中的变量
  9. c#byte字节流的读取_C#中的byte关键字
  10. PHP array_pop()函数与示例