深入浅出MFC--第一章
Windows程序的生与死
当使用者按下系统菜单中的Close命令项,系统送出WM_CLOSE。通常程序的窗口函数不拦截次消息,于是DefWindowProc函数处理它。DefWindowProc收到WM_CLOSE后,调用DestoryWindow把窗口清除。DestroyWindow本身又会送出WM_DESTROY。程序对WM_DESTROY的标准反应是调用PostQuitMessage。PostQuitMessage没什么其它动作,就只送出WM_QUIT消息,准备让消息循环退出。
空闲时间的处理:OnIdle
所谓空闲时间(Idle time),是指【系统中没有任何消息等待处理】的时间。举个例子,没有任何程序使用定时器(timer,它会定时送来WM_TIMER),使用者也没有碰触键盘和鼠标或任何外围设备,那么,系统就处在所谓的空闲时间。
空闲时间常常发生。不要认为你移动鼠标时产生了一大堆的WM_MOUSEMOVE,事实上夹杂在每一个WM_MOUSEMOVE之间就可能存在许多空闲时间。毕竟,计算机速度超乎想象。
后台工作最适宜在空闲时间完成。传统的SDK程序如果要处理空闲时间,可以以下列循环取代WinMain中传统的消息循环:
while(TRUE)
{
if(PeekMessage(&msg, NULL, , , PM_REMOVE))
{
if(msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
OnIdle();
}
}
原因是PeekMessage和GetMessage的不同,GetMessage是阻塞的,而PeekMessage是非阻塞的。
Console程序和DOS程序的区别
console程序是指在Windows下开发的不实用UI的控制台程序
dos程序是指在dos系统下开发的程序
一个进程的诞生与死亡
执行一个程序就必然产生一个进程。最直接的程序执行方式是在shell中即资源管理器找那个以鼠标双击某个可执行文件的图标,执行起来的App进程其实是shell调用CreateProcess激活的。
让我们看看整个流程:
1、shell调用CreateProcess激活App.exe。
2、系统产生一个【进程核心对象】,计数值为1。
3、系统为此进程建立一个4GB的地址空间。
4、加载器将必要的码加载到上述地址空间中,包括App.exe的程序、资料,以及所需的动态链接库。加载器如何知道要加载哪些dll呢?它们被记录在可执行文件的.idata section中。
5、系统为此进程建立一个执行线程,称为主执行线程(primary thread)。执行线程才是CPU时间的分配对象。
6、系统调用C runtime函数库的startup code。
7、startup code调用App程序的WinMain函数。
8、App程序开始运行。
9、使用者关闭App主窗口,使WinMain中的消息循环结束掉,于是WinMain结束。
10、回到startup code。
11、回到系统,系统调用ExitProcess结束进程。
可以说,透过这种方式执行起来的所有程序都是shell的子进程。本来,父进程与子进程之间可以有某些关系存在,但shell在调用CreateProcess时已经把这种关系剪断,因此它们是独立的实例。
深入浅出MFC--第一章的更多相关文章
- 《深入浅出MFC》下载
百度云及其他网盘下载地址:点我 编辑推荐 <深入浅出MFC>内含光盘一片,书中所有原始码与可执行文件尽在其中. 作者简介 侯俊杰,先生不知何许人也,闲静少言,不慕荣利.好读书,求甚解:每有 ...
- 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)
第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏 ...
- 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...
- 深入浅出MFC——MFC六大关键技术仿真(二)
1. 仿真MFC目的:以MFC为例,学习application framework的内部运行.MFC六大关键技术: (1)MFC程序的初始化过程 (2)RTTI(Runtime Type Inform ...
- 第一章:CDib类库的建立
VC++图像处理程序设计(第1版) 杨淑莹 编著 边奠英 主审 第一章 位图基础 Joanna-In-Hdu&Hust 手工打,印象更深刻 使用工具 VS2010 mfc 整本 ...
- 深入理解Magento - 第一章 - Magento强大的配置系统
深入理解Magento 作者:Alan Storm翻译:zhlmmc 前言第一章 - Magento强大的配置系统第二章 - Magento请求分发与控制器第三章 - 布局,块和模板第四章 - 模型和 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
- MyBatis3.2从入门到精通第一章
第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...
- Nova PhoneGap框架 第一章 前言
Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...
- 第一章 MYSQL的架构和历史
在读第一章的过程中,整理出来了一些重要的概念. 锁粒度 表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...
随机推荐
- 使用PowerDesigner建立数据库模型【转】
1. 打开PowerDesigner,点击File->New 2. 选择Conceptual Data Model,并修改Model name. 3. 在Palette工具栏中点击Entity ...
- C++数组参数应用方式探讨(转)
对于经验丰富的编程人员来说,C++编程语言应该是他们经常使用于程序开发的一种实用性语言.那么,在C++中,C++数组参数永远不会按值传递.它是传递第一个元素(准确地说是第0个)的指针. 例如,如下声明 ...
- 算法导论-矩阵乘法-strassen算法
目录 1.矩阵相乘的朴素算法 2.矩阵相乘的strassen算法 3.完整测试代码c++ 4.性能分析 5.参考资料 内容 1.矩阵相乘的朴素算法 T(n) = Θ(n3) 朴素矩阵相乘算法,思想明了 ...
- JavaWeb学习笔记:ServletConfig()和ServletContext()
ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...
- IIS6.0 开启Gzip与PHP Gzip
因为在做一个项目,项目里面服务器主要提供数据,但是数据多了文件就大了,比较浪费流量和时间,我们便用Gzip来处理.我在本机上是apache,服务器上是IIS6.0,用的是php,那么我就在这里分享一下 ...
- Windows Server 2012 R2如何编辑hosts文件
在我的Windows Server 2012 R2系统里编辑hosts文件则会出现没有无法保存的问题,原因是权限不足 错误信息:" Unable to save C:\Windows\Sys ...
- Report studio交叉表求指定维度和的问题
场景:有年份,维度值,不求所有的维度值的和,只求自己想要的省份的和,其中有些省份的值可能为空. 交叉表设计: 运行如图示: 下面要求在交叉表下方多出一列,求上海市与河南省的和.然后空白显示0 解决: ...
- [AngularJS] Angular1.3 ngAria - 1
Accessibility is an often overlooked essential feature of a web application. a11y Is a critical comp ...
- [AngularJS] $scope.$watch
/** * Created by Answer1215 on 11/13/2014. */ function MainCtrl($scope){ function isLongEnough (pwd) ...
- RSA 在C#里简单实现
1.选择两个大素数:p,q;2.计算所得n:n=p*q;3.计算中间结果t:t=(p-1)*(q-1);4.选择一个e:要求e和t的最大公因数是1(也就是e与t互素);5.计算所得d:d*e mod ...