SC_MONITORPOWER启动后台任务

时间:2020-03-21 00:10:08

标签: windows background task hiccup

摘要

在Windows 10中将显示器置于睡眠模式时,Windows似乎执行了一些在屏幕打开时无法执行的任务。 这干扰了我们的软件,我们需要摆脱它。

完整故事

对于具有触摸屏的硬件设备,出于耐用性原因,我需要能够在不使用触摸屏时将其关闭。 Windows可以发送一条消息以将其关闭,即SC_MONITORPOWER。进一步来说: SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

这可以正常工作,但是当屏幕关闭时,Windows显然有时会执行屏幕打开时不执行的某些任务。在这种情况下,我们非常小心,切勿在屏幕上写入任何内容(这在屏幕关闭时会造成巨大的问题,实际上,在屏幕关闭时,仅在DOS框中闪烁的光标会消耗一半的内核)。

我们的软件要求每0.25毫秒执行一次回调。我们已经关闭了Windows中几乎所有的任务,服务和其他几项功能,并且在屏幕打开的情况下,我可以运行我们的软件几天,而不会丢失任何回调。但是随着屏幕的关闭,我会打h。回调已经以最高优先级运行。

因此,当我们关闭所有服务和任务时,显然缺少一些东西。出现打2的原因可能有两种:

  • 每10到30个小时左右发生一次(不确定确切时间,似乎有所不同)。但是它总是发生5次,而它们之间恰好有5分钟(最多相差几毫秒)(因此总共在25分钟内发生5次)。
  • 除此之外,我们通常每4到10个小时会打h一次,但是发生之间的时间似乎并不是很恒定,因此也可能有多种原因。

我有点不知所措,运行分析软件很容易干扰我们自己的软件,这使得检测这些打when何时真正发生以及何时由于运行分析软件而引起的问题变得更加困难。

有趣的是,我在Adobe Audition中录制音频时,在完全不同的系统(不同的硬件,不同的OS版本)上也看到了每5分钟5分钟的情况。在这种情况下,试听会每5分钟丢失一次音频片段,我认为这也只会在显示器处于睡眠模式并且您没有远程登录时才会发生。

我们已经尝试使用直接监视命令(如Nircmd)关闭触摸屏,但它不支持这些操作。我的猜测是SC_MONITORPOWER消息正在Windows中触发更多的事件,如果我们可以将其关闭,则可以解决我们的问题。有什么想法吗?

系统 具有6核,Windows LTSB的英特尔i5-8700,除了我们自己的计算机之外,没有安装其他软件。

1 个答案:

答案 0 :(得分:0)

没关系,问题解决了。这不是正在启动的额外任务,它是现有的Windows进程之一,由于某种原因,该进程仅在显示器关闭时才引起问题。由于杀死它们不是一个选择(Windows只会重新启动它们),因此我暂停了以下过程,而罪魁祸首是其中之一(我不知道是哪一个):

  • sihost.exe
  • igfxEM.exe(我非常怀疑这一个)
  • RuntimeBroker.exe
  • dllhost.exe
  • taskhostw.exe
  • explorer.exe

我必须继续测试更长的时间才能完全确定,但是到目前为止,所有这些任务都暂停了,在过去的38个小时中我没有看到错过的回调。我尚不知道暂停所有这些操作是否有任何弊端,因此我将尝试找出原因并仅暂停该原因。

相关问题