消息队列

发个以前的东西。
http://forum.jiurl.com/

[1] 介绍

每个 GUI thread 都有两个消息队列。不是 GUI thread 就没有消息队列。

GUI thread 的两个消息队列,分别是,Input queue 和 PostMessage queue。

Input queue 又叫做 application queue。
所有键盘和鼠标产生的消息,都被放入 Input queue 中。也只有键盘和鼠标产生的消息会被放入 Input queue 中。

PostMessage queue 又叫做 system queue。程序调用 PostMessage() 产生的消息都被放入 PostMessage queue 中。

这两种队列,虽然叫做 queue,实际上,他们是一个 QMSG 结构的双向链表。顺着链走,走到空,表明链结束了。
一个消息对应一个 QMSG 结构。
MLIST.pqmsgRead 指向这个 QMSG 链上的第一个 QMSG 的地址,也就是链头。
MLIST.pqmsgWriteLast 指向这个 QMSG 链上的最后一个 QMSG 的地址,也就是链尾。
MLIST.cMsgs 是这个链上的 QMSG 个数。

这两种队列中,消息的个数是没有限制的(实际上,在 AllocQEntry() 中有个限制,会链表中项的个数不超过 10000,实际中不可能达到这么大的数字)。

Input queue 位于,THREADINFO 结构的 PQ结构 pq 中的 mlInput,是个 MLIST 结构。

PostMessage queue 位于,THREADINFO 结构的 mlPost,是个 MLIST 结构。

$ 每个 GUI thread 都有自己的 Input queue 和 PostMessage queue

PostMessage queue 不必多说。
Input queue 可以见图 “每个 GUI thread 都有自己的 Input queue 的例子”。

$ Input queue 中可能出现的消息

Input queue 中只可能有下面的消息出现。

#define WM_KEYDOWN                       0x0100
#define WM_KEYUP                         0x0101
#define WM_SYSKEYDOWN                   0x0104
#define WM_SYSKEYUP                     0x0105

#define WM_MOUSEMOVE                     0x0200
#define WM_LBUTTONDOWN                   0x0201
#define WM_LBUTTONUP                     0x0202
#define WM_RBUTTONDOWN                   0x0204
#define WM_RBUTTONUP                     0x0205
#define WM_MBUTTONDOWN                   0x0207
#define WM_MBUTTONUP                     0x0208
#define WM_MOUSEWHEEL                   0x020A

这些 input 消息被处理(被 DefWindowProc() 处理,也可能被程序处理),从而产生各种其他的消息。
比如,在一个窗口的关闭按钮上,按鼠标左键,产生 WM_LBUTTONDOWN,WM_LBUTTONUP,这两个消息被 DefWindowProc() 处理,根据鼠标的当前位置,
发现在窗口的关闭按钮上,就会产生 WM_DESTROY 消息。

程序收到的其他各种消息,都是由程序(DefWindowProc(),也有可能是用户自己的代码)处理这些 input 消息,然后产生的(SendMessage 或者 PostMessage)。

$ INITIAL_POSTMESSAGE_LIMIT

在 AllocQEntry() 中,检查 win32k!gUserPostMessageLimit。
win32k!gUserPostMessageLimit 初始值为 INITIAL_POSTMESSAGE_LIMIT。

#define INITIAL_POSTMESSAGE_LIMIT   10000
#define MINIMUM_POSTMESSAGE_LIMIT     4000

$ 有用的 Windbg 命令

!userkdx.dmq
帮助见 !userkdx.help

dumps all queues
!dq -a

http://forum.jiurl.com/

【SCI复现】基于纳什博弈的多微网主体电热双层共享策略研究(Matlab代码实现)内容概要:本文围绕“基于纳什博弈的多微网主体电热双层共享策略研究”展开,结合Matlab代码实现,复现了SCI级别的科研成果。研究聚焦于多个微网主体之间的能源共享问题,引入纳什博弈理论构建双层优化模型,上层为各微网间的非合作博弈策略,下层为各微网内部电热联合优化调度,实现能源高效利用与经济性目标的平衡。文中详细阐述了模型构建、博弈均衡求解、约束处理及算法实现过程,并通过Matlab编程进行仿真验证,展示了多微网在电热耦合条件下的运行特性和共享效益。; 适合人群:具备一定电力系统、优化理论和博弈论基础知识的研究生、科研人员及从事能源互联网、微电网优化等相关领域的工程师。; 使用场景及目标:① 学习如何将纳什博弈应用于多主体能源系统优化;② 掌握双层优化模型的建模与求解方法;③ 复现SCI论文中的仿真案例,提升科研实践能力;④ 为微电网集群协同调度、能源共享机制设计提供技术参考。; 阅读建议:建议读者结合Matlab代码逐行理解模型实现细节,重点关注博弈均衡的求解过程与双层结构的迭代逻辑,同时可尝试修改参数或扩展模型以适应不同应用场景,深化对多主体协同优化机制的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值