windows – 消息队列在Win32中如何工作?
我在Win32上阅读了一些内容以及消息循环是如何工作的,而且还有一些东西对我来说还不清楚:消息队列中究竟存储了什么?对应于消息(WM_COMMAND,WM_CREATE等)的整数值或指向包含消息整数值的MSG结构的指针以及wParam,lParam等其他内容?
解决方法
为了回答你的问题,队列中的每条消息至少都存储了
>消息所针对的窗口句柄, 请注意,并非所有消息都实际存储在队列中.从不存储从SendMessage()发送到拥有该窗口的线程的窗口的消息;相反,直接调用接收器窗口的消息功能.从其他线程发送的消息被存储直到被处理,并且发送线程阻塞直到消息被回复,通过退出窗口函数或显式地调用ReplyMessage(). API函数InSendMessage()有助于确定windows函数是否正在处理从另一个线程发送的消息. 您或系统发布的消息存储在队列中,但有一些例外. WM_TIMER消息从未实际存储过;相反,如果队列中没有其他消息并且计时器已经成熟,则GetMessage()构造一个计时器消息.这意味着,首先,定时器消息具有最低的出队优先级,其次,来自短周期定时器的多个消息永远不会溢出队列,即使GetMessage()没有被调用一段时间.同样,WM_QUIT也不存储,而只是标记. GetMessage()假装在队列耗尽后检索WM_QUIT,这是它检索的最后一条消息.可能还有其他例外和内部优化. 使用PostMessage()发布的消息最终位于拥有发布消息的窗口的线程的队列中. 消息以什么形式存储在内部,我们不知道,我们也不在乎. Windows API完全抽象出来. MSG结构填充在您传递给GetMessage()或PeekMessage()的内存中.除了Windows SDK指南中记录的内容之外,您无需了解或担心内部实现的详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 64位 – VirtualBox Windows x64错误0xc000035a
- Windows上的git和系统变量
- windows – 如何以编程方式启用/禁用网络连接选项
- 如何从Win8 Javascript metro应用程序引用C#类库?
- 如何在不执行其中的参数的情况下查看Windows环境变量?
- filezilla在windows上搭建服务器
- batch-file – 如何在Windows批处理文件中将双引号行拆分为
- windows-server-2003 – 如何为远程桌面用户设置超时?
- windows – 在本地和非现场备份系统
- remote-desktop – 增加Windows Server 2008上的并发用户数
- wpf – 如何在XAML中的容器(如dll)中获取特定图标
- windows-xp – 如何在Windows XP上注销之前运行我
- Windows – Subversion:如何递归删除所有的.svn
- windows server 2012 安装 VC14(VC2015) 安装失败
- windows – 我该怎么做才能取代FTP?
- buildbot在Windows上作为服务
- powershell – 我的服务帐户需要什么来解决roboc
- windows – MySQL VSS是否“安全”了?
- windows-7 – 使用libvirt管理的kvm 64主机上win
- windows – Active Directory – 具有相同名称的