问题标签 [message-pump]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - 当鼠标指向桌面时,所有应用程序的 Windows 消息泵速度都会降低
背景:
我们的产品为连接到我们系统的每个设备都有一个专用应用程序 (Win32 Delphi) 实例。最近我们有一个巨大的项目,连接了超过 100 台设备,所以我们的控制应用程序启动了 140-160 个 Win32 应用程序。每个应用程序都有它的计时器,我们已经看到,当鼠标光标指向桌面时,所有计时器的滴答声都会变慢。
问题:
实验后发现,不是定时器问题,而是消息泵处理速度的问题。
测试:
我创建了测试应用程序,它有 3 个不同的计时器:简单的 Delphi TTimer(实际上是 SetTimer/KillTimer 内部),使用消息调用回调例程的 QueueTimer,以及调用直接回调例程的 QueueTimer。测试应用程序还有 3 个标签来显示计时器滴答发生的时间。所有计时器每 20 毫秒计时一次,每 10 次计时 (=200 毫秒) 测试应用程序刷新特定计时器的标签。
当我启动超过 110 个应用程序(最小化)时,问题开始发生。从最小化状态恢复一个应用程序后,我可以看到,如果鼠标光标指向任何窗口(测试应用程序窗口、任务管理器、记事本,甚至 Windows 任务栏) - 那么所有计时器都按预期滴答(当然 TTimer 并不像QueueTimer,但仍在可接受的范围内)。但是,只要鼠标光标指向 Windows 桌面(包括桌面中的任何快捷方式),我就会看到,使用消息的计时器比使用消息的滴答声要慢得多。只有使用直接回调的 QueueTimer 继续以相同的速度滴答作响。
问题:
有什么办法可以禁用 Windows 的这种“功能”?
测试和复制:
- W7 + 英特尔至强(4 核)+ NVidia(256MB RAM)+ 16GB RAM,
- W10 + Intel Xeon(4 核)+ NVidia(256MB RAM)+ 16GB RAM,
- W2016 服务器 + Intel 16 核 + 64GB RAM + AMD Radeon(1 GB RAM)。
所有 Windows 视觉效果(如鼠标指针阴影等)都关闭,桌面纯色背景也会发生这种情况。
我真的不知道如何改变这个窗口行为。我试图更改 Windows 桌面堆大小而没有任何效果。
如果需要一些额外的信息(代码示例、编译的应用程序) - 请告诉我。
windows - 线程消息泵
我想了解消息泵在 Windows 系统中的工作原理。我创建了一个控制台应用程序。我在这个应用程序中创建了新线程:
消息泵送如下所示:
我使用另一个程序向该线程发送消息。我看到线程正在接收我的消息。我想了解这是如何发生的。我还没有为这个线程创建一个窗口。根据说明,您需要一个窗口来接收消息。