【问题标题】:Prevent Windows desktop application from interrupting sleep防止 Windows 桌面应用程序中断睡眠
【发布时间】:2016-05-04 14:55:05
【问题描述】:

我有一个 Windows 桌面程序 (Tweetz),它在运行时会中断/阻止睡眠模式。该程序的本质是监视推特并在推特到达时更新 UI。我怀疑网络活动和/或更新 UI 正在阻止/中断睡眠模式。

是否有系统 API 可以告诉 Windows 应用程序不应阻止睡眠?

【问题讨论】:

  • 你看错了。你的程序有问题。弄清楚它是什么并修复它。您要查找的函数调用不存在。因为没必要。
  • “是否有系统 API 可以告诉 Windows 应用程序不应阻止睡眠?” - 没有,但也有可能:SetThreadExecutionState。也许应用程序将其用作“功能”。 UI 更新不会阻止系统进入睡眠状态,但网络流量可能会(请参阅System Sleep Criteria)。
  • 因此,监控推特的网络流量可能会扼杀睡眠。似乎是第 22 个问题。有解决方法吗?
  • 别猜了。隔离并确定问题。
  • 他们很有建设性。您试图猜测问题所在是在浪费时间。您需要学习如何调试和识别您的问题。然后,您可以做出明智的决定。祝你好运。

标签: .net wpf windows winapi windows-applications


【解决方案1】:

我建议采用以下方法。在 Windows 服务中对 Twitter 监视器进行编码并缓冲您需要显示的任何消息。对于这些消息,请检查系统是否处于睡眠模式或桌面是否已锁定(根据您的应用程序规范)。与您的桌面应用程序设置一些通信机制,并在需要/可能时传输消息。该服务不会阻止您的系统进入睡眠状态,您可以使用 SERVICE_ACCEPT_SESSIONCHANGE 通过 SetServiceStatus() 监控会话状态更改。您也可以使用OnSessionChange 事件。

【讨论】:

    【解决方案2】:

    也许 Windows 已成功休眠,但您的应用会立即通过发送网络流量将其唤醒。如果是这样,您可以处理WM_POWERBROADCAST 消息,尤其是PBT_APMQUERYSUSPENDPBT_APMRESUMEAUTOMATIC。在暂停时停止网络流量,并在恢复时重新启动。

    【讨论】:

    • 设置睡眠一分钟,等待睡眠,推特进来,系统唤醒。我还发现,如果我断开网络连接,系统仍然处于休眠状态。不是一个明确的测试,但它确实指向网络活动的事情。我会按照你的建议去做。至少那时它不会醒来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多