VC函数中的延时操作

说到程序中的延时,你会想到怎么做,新开一个线程?如果我的程序只用单线程,

却又想让函数等上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做这个工作是不是有点……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse中SVN的安装步骤(两种)和用法

一、给安装EclipseSVN&#xff0c;最常见的有两种方式&#xff1a;手动方式和使用安装向导方式。详细过程例如以下&#xff1a; 方式一&#xff1a;手动安装 1、从官网下载site-1.6.9.zip文件,网址是:subclipse.tigris.org2、从中解压出features与plugins目录&#xff0c;拷贝到…

c构造函数和析构函数_C ++构造函数和析构函数| 查找输出程序| 套装3

c构造函数和析构函数Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {private:int X;public:Sample(){X 0;}void set(int x){X x;}void print(){cout << X << endl;}};int main(){Sample S[2] { Sample(), Sample()…

XP定时关机

&#xff08;1&#xff09;自己的电脑有时在整理或者下载东西&#xff0c;需要很长时间等待。但是自己因为要休息的原因&#xff0c;不能一直等在电脑弄完后关机。所以这时需要对XP设置定时关机。比如预计这个下载任务完毕后在23:50可以关机&#xff0c;那么点击开始&#xff0…

当当花160买400的书,确定不囤一波?

天空飘来五个字&#xff0c;快要开学啦快快让路 ║ 今天我要去上学喽新学期我决定一定要努力学习没有新书给我充电怎么行&#xff1f;每次买完新书&#xff0c;感觉都是在开一场私人签售会哈哈哈这感觉真不错当当网自营图书大促>> 每满100减50 <<满200减100满300减…

stl取出字符串中的字符_在C ++ STL中使用比较运算符比较两个字符串

stl取出字符串中的字符字符串作为数据类型 (String as datatype) In C, we know string basically a character array terminated by \0. Thus to operate with the string we define character array. But in C, the standard library gives us the facility to use the strin…

万字详解Lambda、Stream和日期

作者&#xff1a;虚无境来源&#xff1a;cnblogs.com/xuwujing/p/10145691.html前言本篇主要讲述是Java中JDK1.8的一些语法特性的使用&#xff0c;主要是Lambda、Stream和LocalDate日期的一些使用。Lambda“Lambda 表达式(lambda expression)是一个匿名函数&#xff0c;Lambda表…

Python 换行符

raw字符串与多行字符串如果一个字符串包含很多需要转义的字符&#xff0c;对每一个字符都进行转义会很麻烦。为了避免这种情况&#xff0c;我们可以在字符串前面加个前缀 r &#xff0c;表示这是一个 raw 字符串&#xff0c;里面的字符就不需要转义了。例如&#xff1a;r\(~_~)…

vb的一些搞怪的操作

VB代码之&#xff1a;鼠标锁option ExplicitPrivate Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate Declare Function ClipCursor Lib "user32" (lpRect As Any) As LongPrivate Sub Command1_Click()锁定鼠标 Dim r As RECT r.…

给51单片机初学者的建议

凡是diy爱好者都应该知道单片机&#xff0c;用直白的话说他就是单片微型计算机&#xff0c;能进行编程而后实现简单的自动化&#xff0c;智能化。 刚入门的时候&#xff0c;看到一些专业名词简直不知道说的是什么&#xff0c;比如寄存器、定时器、计数器、中断等等&#xff0c…

ai推理_人工智能推理能力问答

ai推理1) Which of the following statements correctly define the concept of Inference in AI? It is the way in which facts and information are stored in the storage system of the agentWhen we conclude the facts and figures to reach a particular decision, th…

Java 中 10 大坑爹功能!

今天我们就来聊一下 Java 中的 10 大坑爹功能&#xff0c;它们分别是&#xff1a;1.switch必须加上break才结束2.逻辑运算符的“短路”现象3.数组下标从零开始4.ArrayList遍历删除时报错5.字符转成数字的坑6.while循环体的“障眼法”7.Integer类有缓存8.空方法体导致死循环9.神…

WinXP下变量方式表达对应路径说明

在一些批处理或者系统技巧操作教程文章中&#xff0c;我们常常会看到一些形如 %windir% 或者 %systemdrive% 的变量。这些变量都代表着什么含义呢&#xff1f;下面西部e网的icech为大家整理了在Windows XP下系统变量方式表达相对应的路径&#xff0c;大家可以看得更加清楚明白了…

js 添加事件 attachEvent 和 addEventListener 的区别

1、addEventListener 适用w3c标准方法addEventListener绑定事件&#xff0c;如下&#xff0c;事件的执行顺序和绑定顺序一致&#xff0c;执行顺序为method1->method2->method3 //element.addEventListener(type,listener,useCapture);btn1Obj.addEventListener("cli…

三种循环及break、continue的区别及用法

循环&#xff0c;就是指某些语句重复多次执行&#xff0c;循环语句就是循环指令&#xff0c;能进入循环就能跳出循环&#xff0c;C语言中用到的循环有while、do…while和for三种&#xff0c;跳出循环语句有break和continue两种&#xff0c;这些语句各有特点。 While&#xff1…

PHP | 检查字符串中是否存在特定的单词/子字符串

Given a string and a word/substring, and we have to check whether a given word/substring exists in the string. 给定一个字符串和一个单词/子字符串&#xff0c;我们必须检查字符串中是否存在给定的单词/子字符串。 PHP code to check substring in the string PHP代码…

ORA-00304: requested INSTANCE_NUMBER is busy

为什么80%的码农都做不了架构师&#xff1f;>>> 昨天在项目现场弄oracle rac环境的时候&#xff0c;遇到了这个问题&#xff0c; 由于是rac环境&#xff0c;单独启动一个实例之后&#xff0c;在启动另外一个实例的时候报错了这个错误ORA-00304: requested INSTANCE…

多图证明,Java到底是值传递还是引用传递?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;开篇先来曝答案&#xff0c;在 Java 语言中&#xff0c;本质只有值传递&#xff0c;而无引用传递&#xff0c;解释和证明详见…

vb中filecopy拷贝文件

FileCopy("源文件名","目标文件名")两个参数都是必选的,且都包含路径。在VB中filecopy函数可以直接调用。而CopyFile函数则不能要先定义filesystemobject变量&#xff0c;然后才能用。有过copyFile比fileCopy的功能有所不同。FileCopy是单个文件的copy,目标…

scala提取字符串中数字_如何在Scala中以字符串或数字的形式获取日期,月份和年份?...

scala提取字符串中数字The "calendar" class handles working with date and time in Scala, the class generates the current time in the following format, “ calendar”类处理Scala中的日期和时间 &#xff0c;该类以以下格式生成当前时间&#xff0c; Thu Ap…

图解面试题:找出数组中重复的数字?

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字。题目链接&#xff1a;https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/一、题目描述 找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0&#xf…