1.

正常情况下一个进程里面只有一个主线程而已。
主线程负责消息的读取和分析分发。

消息是保存在消息队列里面,消息队列是跟线程相关的。每一个线程都有一个消息队列(工作线程默认没有,但是随便给他发送一个消息,或线程内调用getmessage函数,系统会自动给它生产一个消息队列的)。程序执行逻辑就是,线程不断的从队列里面取消息GetMessage,分析处理TranslateMessage,然后派发DispathMessage——就是调用消息对应的窗口处理函数而已。(非绑定窗口的消息,再说)。

任何一个窗口都是跟线程相关的,也就是任何一个HWND句柄,都有所属的线程。故,不管是进程内还是进程外向某窗口发消息,此消息都会进入那个窗口所在线程的消息队列,由线程派发给那个窗口过程执行。

对于MODAL对话框,其消息获取循环是窗口自己的(就是while的那段代码),但其实获取的消息还是线程所属的消息队列数据,只是为了实现modal效果,所以由窗口过程来实现消息获取派发,以过滤阻塞对下层窗口的消息派发,(这个效果也可以由主ui线程来完成,不过,那样会更加复杂,故MFC将modal模式对话框的实现效果,放在了cdialog里面去实现的)。

2.

消息循环和多线程不是一一对应的,消息就是一个栈,每个窗口都有自己的消息栈,操作系统会不停取消息出来处理,如果没有消息则等待消息入栈。这个就是消息循环。
不同窗口的消息处理其实只是处理器如何分配资源给各个窗口而已,毕竟窗口消息不是一直占用着cpu的。你可以理解为cpu处理了a窗口,然后让a窗口等待,再去处理b窗口。只是这种切换很快,你根本感觉不到a有等待过。

3.

除了模态对话框其他窗口都没有消息循环,只有窗口函数,窗口函数处理消息但它没有循环,窗口函数是被DispatchMessage调用的,DispatchMessage是你在消息循环调用了,其实可以这么说窗口函数是消息循环的一部分。

关于windows消息机制的猜想相关推荐

  1. Windows消息机制学习笔记(三)—— 消息的接收与分发

    Windows消息机制学习笔记(三)-- 消息的接收与分发 要点回顾 消息循环 消息队列 消息的接收 GetMessage 实验1:理解GetMessage 第一步:编译并运行程序A 第二步:编译并运 ...

  2. Windows消息机制学习笔记(二)—— 窗口与线程

    Windows消息机制学习笔记(二)-- 窗口与线程 要点回顾 消息从哪里来? 实验一:Spy++捕获消息 实验二:消息捕获 消息到哪里去? 窗口在哪? 实验:分析CreateWindowExW 窗口 ...

  3. Windows消息机制学习笔记(一)—— 消息队列

    Windows消息机制学习笔记(一)-- 消息队列 基本概念 实验一:使用代码画出最简单窗口 第一步:编译并运行以下代码 第二步:查看运行结果 第三步:使用其它窗口对其进行覆盖,观察效果 总结 消息队 ...

  4. windows消息机制和Linux,Windows消息机制初谈 (转)

    Windows消息机制初谈 (转)[@more@]是一个消息的OS,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解. 1.消息的组 ...

  5. Windows消息机制-PreTranslateMessage

    PreTranslateMessage作用和使用方法 Windows消息机制的流程: A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 B. 应用程序在消息循环中调用GetMe ...

  6. Windows消息机制详解-5

    一. 什么是消息 在解释什么是消息之前,我们先讨论一下程序的执行机制问题.大体上说,程序按照执行机制可以分为两类: 第一类是过程驱动.比如我们最早接触编程时写的C程序,又或者单片机程序.这类程序往往预 ...

  7. windows消息机制详解-3

    1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛. Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序 ...

  8. 【转】深入理解Windows消息机制

    转自:https://blog.csdn.net/liulianglin/article/details/14449577 今天我们来学一学Windows消息机制,我们知道在传统的C语音程序中,当我们 ...

  9. SendMessage和PostMessage及Windows消息机制简介

    SendMessage: The SendMessage function sends the specified message to a window or windows. It calls t ...

最新文章

  1. 【青少年编程】【三级】 魔术表演“开花”
  2. hdu 5059 判断数字表示方式以及范围合法(int型之内)
  3. (转载)DevExpress ASPxGridView 使用文档一:概述
  4. Setting up Jupyter with Python 3 on Ubuntu
  5. 转 性能分析工具汇总
  6. 【渝粤教育】国家开放大学2018年春季 0529-21T高级英语阅读(1) 参考试题
  7. python的print
  8. Assembly.Load,LoadFile,LoadFrom
  9. EasyUI框架01——基础学习
  10. java核心技术卷——学习笔记(一)
  11. 新手入门makefile教程
  12. 10张思维导图--javascript
  13. 检测分割算法改进(篇二) Residual Feature Augmentation(RFA模块)及Adaptive Spatial Fusion(ASF模块)
  14. bzoj4391 [Usaco2015 dec]High Card Low Card题解
  15. 【HDR学习】苹果EDR技术洞察(二)
  16. 用vue2写的开发者在线简历导出
  17. 第一天-2.安装vmware虚拟机kali系统
  18. 《疯狂JAVA讲义》学习笔记(一)
  19. 2021年低压电工考试资料及低压电工复审模拟考试
  20. oracle11g 联机重做日志、归档日志、日志文件组以及日志文件操作

热门文章

  1. mysql包导入之后idea仍然报错_IDEA连接MySQL报错怎么弄?
  2. php改变图片宽高,php缩放图片(根据宽高的等比例缩放)实例介绍
  3. 往邮箱里发python怎么发_Python 超简单的邮件发送方法
  4. python发邮件给女朋友代码_python发邮件的代码
  5. html按钮按下效果_您应该在网站中尝试的8种惊人的HTML按钮悬停效果,让您的网站令人难忘...
  6. java 静态绑定原理_Java方法的静态绑定与动态绑定讲解
  7. velocity参数重新赋值_Velocity(5)——#set指令
  8. 半夜三点,去医院看病。。。
  9. 我的10年富士康故事
  10. 突发!百度CEO李彦宏被当中泼了一瓶水,肇事者网名:直男上树