消息与消息队列二(译自MSDN的About Message and Message Queue)

本文介绍了窗口过程的概念及其如何处理消息的基本原理。包括窗口过程如何处理消息、消息过滤的使用方法、以及如何投掷和发送消息等内容。
  1. /*
  2.     窗口过程
  3.        窗口过程是一个函数,它会处理所有发送至与其关联的窗口的消息,每个窗口类都有一个
  4.        窗口过程,同一窗口类的所有窗口共用一个窗口过程。
  5.        
  6.        系统以参数的方式将消息发送到窗口过程,然后窗口过程会根据消息采取合适的操作,它会
  7.        检查消息的标识符,处理时会参考消息里的附加信息。
  8.        
  9.        窗口过程并不会处理其接收到的每一个消息,如果它处理不了接收到的消息,它会将些消息
  10.        返回给系统以寻求默认的处理,完成默认处理的函数是DefWindowProc,处理完成之后会
  11.        返回默认的处理结果,接收消息的窗口过程会将此结果看作自己处理后的结果并返回之。
  12.        多数的窗口过程只处理少数的消息,大部分的消息都由默认的窗口过程来处理。
  13.        
  14.        因为一个窗口过程可以处理一个窗口类的所有窗口,所以为了明确窗口类的哪个窗口会受到
  15.        消息的影响,就需要窗口句柄的帮助。
  16.     消息过滤
  17.         通过函数GetMessage和PeekMessage可以有选择性的从消息队列中提取消息,过滤
  18.         器是一个区间内的消息标识符或者窗口句柄,或者二者都指定。当消息延迟到达消息
  19.         队列后,程序可以通过这种方式检查消息的存在性。同样如果程序想优先处理硬件
  20.         消息时,这一点也很有用。
  21.         WM_KEYFIRST和WM_KEYLAST可以作为提取所有键盘消息的过滤器。WM_MOUSEFIRST
  22.         WM_MOUSELAST同样可以作为提取所有光标消息的过滤器。
  23.         使用消息过滤最需要注意的一点是要确保要提取的消息类型有机会被投掷到消息队列
  24.         中,如果要过滤的消息不能被投掷到消息队列中时,有时会影响整个程序的性能。
  25.         比如GetMessage是取到消息之后才返回,而如果要提取的消息一直不存在,则会出现
  26.         死循环的现象。
  27.     投掷和发送消息
  28.         每一个应用程序都可以投掷或发送消息,投掷消息是将消息复制到消息队列中,而
  29.         发送消息则是将消息直接作为参数发送给窗口过程。PostMessage可以实现投掷
  30.         消息的功能,SendMessage,BroadcastSystemMessage,SendMessageCallback,
  31.         SendMessageTimeOut,SendNotifyMessage,SendDlgItemMessage可以实现发送
  32.         消息的功能。
  33.         投掷消息
  34.             投掷消息通常用于通知一个窗口去完成指定的任务。PostMessage会构造一个
  35.             MSG结构然后将其复制到消息队列中。然后程序的消息循环最终会取得这个消息
  36.             然后将其发送给指定的窗口去处理。
  37.             投掷消息时,程序可以不用指定窗口句柄,如果投掷时指定窗口句柄为空,则
  38.             消息会被投掷到当前线程的消息队列中,因为没有指定窗口句柄,所以程序的
  39.             消息循环必须处理这个消息,通过这种方式可以实现创建一个消息而应用于整个
  40.             程序而不是特定的窗口。
  41.             另外如果想向系统里所有的顶级窗口发送,可以将窗口句柄设置为HWND_TOPMOST。
  42.             编程过程中一个常见的错误认识是认为PostMessage总能成功地投掷出一个消息,
  43.             这是不对的,比如当消息队列满的时候。所以在使用这个函数的时间要检查
  44.             这的返回值,如果返回值说投掷失败,我们就需要再进行投掷操作。
  45.         发送消息
  46.             发送消息通常用于通知窗口过程立即去执行一个任务。SendMessage将消息发送
  47.             到相关的窗口过程,此函数会等到消息被处理之后再返回,子窗口与父窗口通常
  48.             以就发送消息的方式进行通信,
  49.             SendMessageCallback区别于SendMessage的地方在于它发送完消息之后会立即
  50.             返回,消息被处理完之后,系统会调用相应的回调函数。   
  51.             通过函数InSendMessage和InSendMessageEx,窗口过程可以检查它处理的消息
  52.             是否来自另外一个线程,消息源会决定消息是否处理的时候,这两个函数就有了
  53.             用场。
  54. */
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理实现方法;②学习如何在STM32平台上进行电机控制算法的移植优化;③为开发高性能、低成本的电机驱动系统提供技术参考实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值