关于SetTimer间隔小于OmTimer执行时间的问题
如果SetTimer的时间间隔为t,其响应事件OnTimer代码执行一遍的时间为T,且T>t。
这样,一次未执行完毕,下一次定时到,这时候程序会如何执行?
可能的情况:
1、丢弃还未执行的代码,开始新的执行;
2、不丢弃,Timer消息进入消息队列排队,等到原来的代码执行完毕后,马上开始新的执行;
3、重入,就是原来的还继续执行,同时又开始一个新的执行;
答案:第二个,或者,第一个丢弃。不过丢弃的情况是, 消息队列满了, 第二次的消息没进去。
void COnTimer1Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CString str = "";
str.Format(" %d",i);
for(int k = 0;k<100;k++)
{
TRACE(str);
}
i++;
CDialog::OnTimer(nIDEvent);
}
不是的,你可以这样想,每一个窗口有一个消息队列,收到的消息就存在这里
然后winmain中的那个getmessage循环从队列中取得消息,然后dispatchmessage(其实,
可以认为她就是以消息为参数,调用窗口过程。)然后在去取下一个消息。
所以,第二个wm——timer来了,也只能在队列里面呆着, 等它前面的所有消息
都被处理完毕才会被处理。
另外,wm——timer消息有一个特点,只要消息队列中还有wm——timer(同一个定时器),
那么这个wm——timer就会被丢弃。也就是说,消息队列中最多只有一个wm——timer
(同一个定时器)
DoModal和MessageBox的自身代码里面有消息循环(负责消息取出和处理),当一个MessageBox还存在的时候,CPU还在处理MessageBox内部的代码,当你有任何消息的时候到来,MessageBox内部的代码会负责将之处理掉。
你要是不明白我给你讲!这里只有一个线程,当然只有一个消息循环,只是当你弹出对话框的时候,对话框阻塞了主线程的消息循环,而接替过来了消息循环,因为它的内部也是一个无限的消息接收,派发机制。而你再弹出另一个对话框b的时候,对话框b又会接替过来消息循环,而把第一个对话框阻塞掉。这也是你为什么弹出第2个对话框后第一个对话框变得点击无效了的原因。
http://bbs.csdn.net/topics/110151804
http://bbs.csdn.net/topics/370257632
关于SetTimer间隔小于OmTimer执行时间的问题的更多相关文章
- 修复FFMPEG 复用 PAT、PMT发送间隔小于25ms的错误
目录 分析ffmpeg源码 分析问题 修改源码解决问题 分析ffmpeg源码 分析问题 mpegtsenc.c 找到发送PAT.PMT的函数 /* send SDT, PAT and PMT tabl ...
- SVM核函数与软间隔
核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...
- 谈谈C#中各种线程的使用及注意项~
说到线程,很多人会想到timer吧, 接下来我们就来学习一下 timer 吧,摇摇脑袋,清醒一下,接下来开始学习.... 一.基本概念 1.什么是进程? 当一个程序开始运行时,它就是一个 ...
- underscore源码解析 (转载)
转载出自http://www.cnblogs.com/human/p/3273616.html (function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.j ...
- c# 中定时器的用法
来源于:http://blog.sina.com.cn/s/blog_62c501440100fog1.html System.Threading.Timer 是一个非常常用的定时器类,关于这个类的使 ...
- underscore源码解析
(function() { // 创建一个全局对象, 在浏览器中表示为window对象, 在Node.js中表示global对象 var root = this; // 保存"_" ...
- .NET中的三种Timer的区别和用法
最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是: //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应 ...
- .NET中的三种Timer的区别和用法(转)
最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是: //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗 ...
- VC++或QT下 高精度 多媒体定时器
在VC编程中,用SetTimer可以定义一个定时器,到时间了,就响应OnTimer消息,但这种定时器精度太低了.如果需要精度更高一些的定时器(精 确到1ms),可以使用下面的高精度多媒体定时器进行代码 ...
随机推荐
- 1 zabbix3.2.4 安装
一. 搭建zabbix服务 Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7.如下是 ...
- EasyPlayer-RTSP播放器:从底层到上层专注于RTSP播放Windows、Android、iOS RTSP Player
EasyPlayer-RTSP播放器是一套RTSP专用的播放器,包括有:Windows(支持IE插件,npapi插件).Android.iOS三个平台,是由EasyDSS团队开发和维护的区别于市面上大 ...
- 九度OJ 1074:对称平方数 (数字特性)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4804 解决:2173 题目描述: 打印所有不超过n(n<256)的,其平方具有对称性质的数. 如11*11=121 输入: 无任何输 ...
- AWS:4.VPC
主要介绍 1.Amazon混合云 2.将EC2加入VPC 3.VPC经典场景 4.VPC安全保障 Amazon混合云 : 在公有云的基础上创建私有云 VPC概念 VPC(VPC Virtual Pri ...
- 使用ab 进行并发压力测试
使用ab 进行并发压力测试 - 参与商 - 博客园 https://www.cnblogs.com/shenshangzz/p/8340640.html 使用ab 进行并发压力测试 ab全称为:a ...
- 【题解】[Ghd]
[题解]Ghd 一道概率非酋题? 题目很有意思,要我们选出大于\(\frac{n}{2}\)个数字使得他们的最大公约数最大. 那么我们若随便选择一个数字,他在答案的集合里的概率就大于\(0.5\)了. ...
- ABAP-创建客户
CALL METHOD CMD_EI_API=>MAINTAIN_BAPI FUNCTION Z_CS_RFC_OA002 . *"------------------------ ...
- python 安装coreml
2.安装pip, 下载get-pip.py, https://bootstrap.pypa.io/get-pip.py,然后Python 这个文件,如果没有权限就加sudo 3.安装coreml:这 ...
- POJ2104 K-th Number —— 区间第k小 整体二分
题目链接:https://vjudge.net/problem/POJ-2104 K-th Number Time Limit: 20000MS Memory Limit: 65536K Tota ...
- hdu1015 —— 回溯
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 因为之前看了下刘汝佳的<算法入门经典>,就用类似打印全排列,八皇后的方法做.本以为不 ...