`
bluethink
  • 浏览: 97898 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

消息驱动机制

 
阅读更多

“消息”是windows运行机制中一个基本而又重要的概念。消息是一个报告事件发生的通知,消息驱动是围绕消息的产生与处理展开的,并依靠消息循环机制来实现。


从程序设计的观点看,某条消息可被视为某个事件的发生,比如点击鼠标。事件即可以由用户引发,也可以由应用程序产生,当然Windows本身也能发出消息。Windows应用程序的消息来源有4种:输入消息,控制消息,系统消息,用户消息。

  Windows是一个多任务操作系统,所以没有哪一个程序能够独占系统的资源,资源都是由Windows统一管理的。那么某个程序是如何获得用户的信息呢?事实上,Windows在时刻监视着用户的每个举动,并分析用户的动作与哪一个程序相关,然后将动作以消息的形式发送给当前的应用程序。相反,应用程序也在时时等着消息的到来,一旦发现它的消息队列中有未处理的信息,就获取并分析该消息,并根据消息所包含的内容采取适当的动作来响应。这里我们引出另一个概念“消息驱动”。比如当你单击file菜单的时候,首先这个动作被windows所捕获,而不是应用程序。经分析windows知道该动作该由哪个应用程序处理,然后windows就发送WM_COMMAND消息给该应用程序,它告诉应用程序,你单击了file菜单。应用程序得知这一消息后,便采取相应的动作来响应它,进行“消息处理”。Windows为每个线程维护了相应的消息队列,应用程序的任务就是不停地从特定的消息队列中获取消息、分析消息并处理消息,直到消息(WM_QUIT)为止。这个过程的程序结构称为“消息循环”。


消息传送


发送消息

  发送一个消息时,系统直接调用窗口进程。通信是即时的。直到窗口进程为调用函数返回一个结果后,应用程序才能继续。

寄送消息

  寄送一个消息时,系统把消息发送到拥有该窗口的应用程序消息队列中。消息队列是系统定义的一个内存块,用于临时存储消息,或是把消息直接发给窗口过程。每个窗口维护自己的消息队列,从中取出消息,利用窗口函数进行处理。一有空闲,应用程序就搜索消息队列,并在消息队列中处理消息,即从队列中删除他们。调用函数发送消息后就立即返回,但结果只是表示消息寄送成功与否,而不表示被调用窗口进程的结果。通常鼠标和键盘消息是寄送的。

消息处理



  Windows程序在处理消息时使用了“回调函数”的特殊函数。这个函数由应用程序定义,但并不由应用程序来调用,而是共操作系统或者其子系统来调用的。这种调用通常在某一事件发生,或者在窗口或字体被枚举时发生。


Windows对消息驱动机制的支持


基本模块

  Windows操作系统包括3个内核基本模块:

  GDI:负责在屏幕上绘制象素、打印硬考贝输出,绘制用户界面

  KERNEL:支持与操作系统密切相关的功能。如进程加载,系统调用

  USER:为所有的用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息,并把他们发给相应的窗口的消息队列。

  上述GDI、KERNEL和USESR模块中的库函数可被应用程序调用,也可被其他程序模块调用。Windows把包含库函数的模块称为EXPORT,在WINDOWS提供的一种新的EXE文件中有一个入口表用于指明模块内每个输出函数的地址。

应用程序

  从应用程序方面,用到的库函数被认为是IMPORT函数。应用程序对一个入口函数发出的远程调用可用不同的重定位表来确定。几乎所有的应用程序都至少包含一个入口库函数或者称为被外部调用的函数。该windows库函数一般来自某个程序模块,用于从WINDOWS接收消息,该函数的使用标志必须是EXPORT,这才能使WINDOWS允许它被一个外部模块正常调用。


分享到:
评论

相关推荐

    MFC的消息机制的实现原理和消息处理的过程

    ### MFC的消息机制实现原理与消息处理流程 MFC(Microsoft Foundation Classes)是微软提供的一套基于Windows API的面向对象的C++类库,旨在简化Windows应用程序开发过程中的复杂度。MFC支持多种Windows功能,其中...

    如何理解VC编程的windows消息处理机制

    本篇文章将深入探讨Windows消息处理机制,以及如何在VC编程中运用这一机制。 一、Windows消息 1. 消息队列:Windows操作系统维护着一个消息队列,用于存储应用程序产生的各种消息,如鼠标点击、键盘输入等。当用户...

    Visual C++模态对话框消息处理机制的分析

    在Windows操作系统中,GUI程序的设计理念基于消息驱动机制,这是其核心特征之一。消息驱动机制通过消息队列(message queue)来传递消息给应用程序,从而实现交互。消息是一种包含窗口句柄、消息标识号、消息参数等...

    linux-基于消息驱动的二级任务调度模型

    在Linux系统中,任务调度是操作系统的核心功能之一,它决定了哪些进程可以运行以及它们如何共享处理器时间。在“基于消息驱动的二级...同时,消息驱动机制也有助于简化并发编程的复杂性,提高系统的可维护性和可靠性。

    Win32编程 消息驱动

    这种消息驱动机制类似于银行柜台业务的运作方式:每当银行开门营业时,每位工作人员都会回到各自的岗位上,等待顾客前来办理业务。当有顾客到达时,工作人员就会根据顾客的需求提供服务。如果没有顾客到来,则工作...

    Windows事件驱动机制.pdf

    Windows事件驱动机制是Windows操作系统中一种核心的交互方式,其允许系统在发生特定事件时,通过消息传递的方式来通知并驱动应用程序做出响应。在Windows平台上,无论是GUI(图形用户界面)程序还是服务程序,都依赖...

    Windows时间驱动机制

    Windows的消息循环是事件驱动机制的关键组成部分。每个运行的Windows应用程序都有一个消息队列,用于存储待处理的消息。消息循环通过不断地调用`GetMessage`函数来获取队列中的消息。`GetMessage`函数会阻塞,直到有...

    基于应用层自定义消息驱动的面向对象通用C/S应用程序框架

    在这样的框架中,应用层消息驱动机制通常包括以下几个关键组成部分: 1. **消息队列**:用于存储待处理的消息,确保消息的有序性和避免并发处理冲突。 2. **消息处理器**:解析和执行消息,根据消息类型调用相应的...

    消息驱动系统实现模型

    消息驱动系统是一种软件架构模式,它通过消息传递来协调各个组件之间的交互,而不是直接调用彼此的函数或方法。在消息驱动系统中,组件通过发送和接收消息进行通信,这种方式提高了系统的灵活性、可扩展性和解耦性。...

    嵌入式Linux图形用户界面实现.pdf

    该技术是基于Linux操作系统,利用SDL抽象层和基于消息驱动机制的Client/Server结构来实现图形用户界面。 在嵌入式系统中,图形用户界面是非常重要的,因为它可以提供一个 friendly的用户界面,让用户可以轻松地与...

    c++多线程互斥编程示例源码(附控制台下的消息驱动)

    在本示例中,我们将探讨如何使用C++实现多线程互斥编程,以及如何在控制台环境下利用消息驱动机制。这个示例包括一个时钟和两个线程,它们之间通过互斥量来确保对共享资源的安全访问。 首先,让我们理解“多线程”...

    在Windows XP下ISA数据采集卡的WDM驱动开发与中断实时数据采集的实现.doc

    WDM驱动程序采用了类似于Windows应用程序的消息驱动机制,使用IRP(I/O请求包)作为驱动程序间通信的基础。在Windows XP中,I/O管理器通过发送IRP来管理驱动程序的行为,并将用户的设备请求转发给相应的驱动程序。...

    基于Linux的消息驱动Socket模型.pdf

    综上所述,基于Linux的消息驱动Socket模型通过引入消息机制和面向对象的设计,克服了传统Socket模型的一些局限性,提高了网络编程的效率和易用性,特别是在处理大量并发连接和复杂网络服务场景下,具有显著优势。...

    qt的消息处理机制

    Qt 消息处理机制是 Qt 框架中的一种事件驱动机制,它允许开发者创建响应用户交互和其他事件的应用程序。Qt 消息处理机制由事件的产生、接受和处理三个部分组成。 事件的产生:事件可以来自于多种来源,包括键盘和...

    C# Message (消息机制)

    二、消息驱动的过程 所有的外部事件,如键盘输入、鼠标移动、按动鼠标都由 OS 系统转换成相应的消息发送到应用程序的消息队列。每个应用程序都有一段相应的程序代码来检索、分发这些消息到对应的窗体,然后由窗体的...

    单片机程序设计中运用事件驱动机制

    ### 单片机程序设计中运用事件驱动机制 #### 摘要 本文探讨了如何在单片机程序设计中引入事件驱动机制,通过实际案例分析了这种方法的优点,特别是能够提高系统对多中断的实时响应能力,并降低多中断系统调试的难度...

    MFC中消息映射机制分析

    在SDK(Software Development Kit)环境下,Windows程序是基于消息驱动的。操作系统捕获外部事件并转化为消息,这些消息被放入消息队列,通过消息循环(如`GetMessage`、`TranslateMessage`和`DispatchMessage`)...

    WindML事件驱动机制分析

    ### WindML事件驱动机制分析 #### 一、嵌入式系统与WindML的背景 随着多媒体信息技术、互联网技术、通信技术以及消费类电子产品智能化趋势的不断加强,嵌入式系统因其特有的优势——占用内存少、高性能、具有完全...

Global site tag (gtag.js) - Google Analytics