理解windows程序设计
来源:互联网 发布:淘宝买电脑怎么分期 编辑:程序博客网 时间:2024/06/06 20:58
windows下程序运行时,程序员(代码)负责的工作主要涉及主函数、窗口类、窗口处理函数三部分。
对于主函数,注意到:
1、主函数中的Getmessage函数实际上是一个查找函数,用于查看系统消息队列中属于自己的消息
2、主函数中是没有DC这个资源句柄的。
关键疑问是:
1、当窗口函数在处理消息的时候,主函数还能够同时去执行Getmessage吗?
2、为什么主函数要使用DispatchMessage再次发送消息,而不是直接调用窗口处理函数?
对于第一个问题,答案应该是可以。注意到,窗口处理函数是有返回值的,而接受这个返回值的是系统,换句话说,调用窗口处理函数的也是系统。这意味着系统为窗口维护了一个消息队列。这个消息队列和Getmessage查找的消息队列不是同一个队列。所以主函数和窗口处理函数的工作可以同时进行。
对于第二个问题,实质上就是,系统为什么要建立两种消息队列。其实,还可以同时考虑为什么主函数中没有DC这个资源句柄。
可以认为,系统将窗口资源和窗口处理函数放在了一起,主函数仅仅是作为进程管理的实例句柄而存在,这可以从主函数没有Dc句柄看出来。而将两者隔离开的就是两个消息队列。想象一下,如果每个主函数直接调用自己的窗口处理函数,那么首先它就要有Dc句柄,以便传给窗口处理函数。而且,每次主函数只能够等待窗口处理函数返回后,才能够继续到系统消息队列中去获取消息。而窗口资源是有限的,窗口处理函数要等待窗口资源,这个时候,就会产生很多延迟。两个消息队列的建立,能够及时响应用户的输入,建立缓冲区以便系统调配资源,很多非窗口消息可以通过mfc建立的独立于系统两个消息队列的消息机制来处理。
- 理解windows程序设计
- windows程序设计 初入门的小理解
- windows 程序设计
- Windows程序设计
- Windows程序设计
- Windows 程序设计
- Windows程序设计
- Windows程序设计
- WINDOWS程序设计
- Windows 程序设计
- Windows程序设计
- Windows程序设计
- Windows程序设计
- windows 程序设计
- windows 程序设计
- windows 程序设计
- Windows程序设计
- windows程序设计
- .net com组件
- 一个创建树控件的例子
- Ubuntu删除和新建用户
- 如何去掉图片链接的蓝边
- 虚继承
- 理解windows程序设计
- 堆和栈的区别(转过无数次的文章)
- Ubuntu 命令技巧
- CodeSmith属性解释
- 【转】UNIX/Linux平台上可执行文件格式分析
- CodeSmith属性解释
- 中国民用GPS的应用情况及市场分析
- 网页入侵
- js版随机字符串,适合做验证码