从一个剧情开始

路遥的《平凡的世界》因为翻拍成电视剧,又再次火起来了!我们就从这里开始吧,其小说是以这样一个场景开头的:

在一个半山腰县立高中的大院坝里,在一个校园内的南墙根下,按班级排起了十几个纵队的年轻男女,各班的值日生正忙碌地给众人分发饭菜…… 菜分为甲、乙、丙三等,甲菜以土豆、白菜、粉条为主,还有可人大肉片,乙菜没有肉,丙菜只有清水煮白萝卜。主食也分为三等:白面馍,玉米面馍,高粱面馍,白、黄、黑分别代表了三种差别,学生们戏称欧洲、亚洲、非洲。每个人的饭菜都是昨天登记好并付了饭票的,在这一长长的队伍中自然以光景较好的富家子弟排在最前,光景一般的随后,而那些家庭贫困少吃缺穿的学生只能在其他学生走后才姗姗来迟……

这一活生生的例子虽然看着有些悲凉(排队打饭的情景相信曾经是学生的你一定经历过,可能没这般悲凉而已),却像极了消息机制的原理,也许发明消息机制的灵感就是原来于这样的生活吧!排队的学生就是消息队列,值日生分发饭菜就消息循环并完成消息处理,学生吃饭就类似于事件处理。

什么是消息?

何为消息?消息就是带有某种信息的信号,如你用鼠标点击一个窗口会产生鼠标的消息,键盘输入字符会产生键盘的消息,一个窗口大小的改变也会产生消息。

消息从何而来?根据冯·诺依曼的体系结构计算机有运算器、存储器、控制器和输入设备和输出设备五大部件组成,消息主要来自输入设备,如键盘、鼠标、扫描仪等,也可来自已窗口和操作系统。

消息机制的三大要点:消息队列、消息循环(分发)、消息处理。其结构如下:

图1.消息机制原理

消息队列就是存放消息的一种队列,具有先进先出的特点。每产生一个消息都会添加进消息队列中,在Window中,消息队列是在操作系统中定义的。消息队列就如同一群排队打饭的少男少女,这群人中光景较好的排在前面,光景较差的排在后面,可以理解成是一种优先级队列!要想更多的了解队列的相关知识,可参见队列。

消息循环就是通过循环(如while)不断地从消息队列中取得队首的消息,并将消息分发出去。类似于上面的例子中分发饭菜的值日生。

消息处理就是在接收到消息之后根据不同的消息类型做出不同的处理。上面例子中值日生根据学生不同类型的饭票给他们不同等级的饭菜,就是消息处理,学生手中的饭票就是消息所携带的信息。

事件是根据接收到的消息的具体信息做出的特定的处理,放在代码中就是事件响应函数。上面的例子中,学生拿到饭菜后吃饭,就是具体的事件。

转自luoweifu《编程思想之消息机制》

【转】编程思想之消息机制相关推荐

  1. 编程思想之多线程与多进程——从操作系统的角度述说线程与进程

    什么是线程 什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识.希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领 ...

  2. 非阻塞模式WinSock编程入门(Socket关联窗口消息机制)

    本文版权归 CSDN trcj 所有,转载请自觉按如下方式于明显位置标明原作者及出处,以示尊重! 作者:trcj 原文:http://blog.csdn.net/trcj1/archive/2010/ ...

  3. 利用消息机制实现.NET AOP(面向方面编程)--基本概念和实现

    本系列文章主要讲述如何利用.NET的Remoting消息框架实现AOP 本系列文章试图实现三种AOP实现 本系列文章以示例代码为主,对一些概念和原理不会进行过于深入的讨论 这里不谈论AOP在现实开发中 ...

  4. 用电脑回收站的数据保护机制:理解python类成员保护和访问限制,及编程思想

    类成员保护和访问限制有什么用 python类的成员可以通过"成员保护和访问限制的机制"非常大程度地禁止类实例对象对其进行直接访问和直接的修改,只能通过类实例方法来获取.访问或修改. ...

  5. mfc编程消息机制中消息汇总

    做VC开发必须熟悉消息机制,笔试面试重点,自己在这方面很欠缺,搜集学习一下 WM_CREATE CreateWindow 初始化工作 GetMessage 遇到WM_QUIT,程序结束 Dispatc ...

  6. 几种常用编程语言的编程思想和方法 转

    搞软件的人,编程语言的掌握是基本功,如果单单是学习语法,最慢的一周之内也应该可以搞定(个人认为 语法层面c++是最复杂的).不幸的是,软件的本质是逻辑,解决方案的设计是要借助某种解决问题或编程的思想的 ...

  7. C++编程思想重点笔记(下)

    上篇请看:C++编程思想重点笔记(上) 宏的好处与坏处 宏的好处:#与##的使用 三个有用的特征:字符串定义.字符串串联和标志粘贴. 字符串定义的完成是用#指示,它容许设一个标识符并把它转化为字符串, ...

  8. Windows消息机制要点

    1. 窗口过程     每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...

  9. java 四舍五入_《JAVA编程思想》5分钟速成:1-4章:概述

    前言: 1.面向对象的特征有哪些方面? 2.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 3.float f=3.4;是否正确? 4.short s1 = ...

最新文章

  1. tomcat8.0.15+spring4.1.2的集群下共享WebSocketSession?
  2. 写代码如坐禅:你是哪一类程序员?
  3. numpy 矩阵的用法
  4. Angular16 Angular整合zTree、异步加载节点数据
  5. c# datagridviewcomboboxcell值无效的解决办法
  6. pip 指定镜像源 指定版本 批量安装
  7. 美国薪资最高的技术技能:Golang、Kafka、DynamoDB、Redshift、Cassandra
  8. 安装系统之九 U盘装原版WIN8教程
  9. 免费:轻松实现在微信中直接下载APK
  10. Windows系统压缩卷时可压缩空间远小于实际剩余空间解决方法
  11. 基于C#实现的《勇士返乡》游戏设计
  12. 名帖128 成亲王 楷书《心经》册
  13. 还不懂这八大算法思想,刷再多题也白搭!
  14. 相关系数,互相关函数,协方差,卷积
  15. matlab获取图像某点RGB值、灰度值的方法
  16. Bugku,Web:各种绕过哟
  17. Selenium+Python3之:多线程进行跨浏览器测试
  18. DW 简单效果代码整理
  19. jmeter http并发测试设置教程(设置线程组,设置http,csv参数化,查看结果集)
  20. 阿里新版java开发手册(2019华山版、2020泰山版)

热门文章

  1. jvm类加载机制_面试:对于JVM类加载机制深度解析
  2. centos6 安装 mantisbt-1.2.8 —— (1) VMware Workstation 12 Pro 虚拟机安装步骤详解(window 10 系统)
  3. jquery实现页面导航列表点击添加active样式
  4. node中使用es6/7/8 --- 支持性与性能
  5. HTML中常用字符实体
  6. 【BZOJ】1070: [SCOI2007]修车
  7. JavaScript基础3——关于运算符
  8. 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
  9. 2013cvpr的总结
  10. Purism 宣布推出 PureOS 应用商店