代码之家  ›  专栏  ›  技术社区  ›  Alexander Ljungberg

在Java中检测操作系统睡眠和唤醒事件

  •  7
  • Alexander Ljungberg  · 技术社区  · 15 年前

    Java程序是否有办法检测操作系统何时将进入睡眠状态,或者如果没有,至少可以检测到唤醒?

    实际问题是,在特定的应用程序中,许多MySQL数据库操作都是在后台运行的。在Windows计算机上进行测试时,这些数据库事务在睡眠/唤醒周期后被中断,导致程序中出现大量错误情况。这些错误通常如下所示:

    java.net.SocketException
    MESSAGE: Software caused connection abort: recv failed

    如果我们能够对“将很快入睡”事件做出反应,我们可以尝试暂停后台操作以抢先解决问题。不太理想的是,如果我们能够对“刚刚醒来”事件做出反应,我们至少可以抑制错误消息。

    3 回复  |  直到 15 年前
        1
  •  10
  •   rob    15 年前

    您可以通过定期比较当前系统时间和以前的系统时间来检测唤醒。

    http://www.codeguru.com/cpp/w-p/system/messagehandling/article.php/c6907

        2
  •  3
  •   jprete    15 年前

    我知道这并不完全是你想要的,但也许正确的答案是,在编写代码时,假设你的套接字不一定能正常工作。连接可能会崩溃的原因有很多,例如,因为DB被关闭进行维护,或者因为有人被您的以太网电缆绊倒。我认为,如果有人在你的应用程序运行时拔出网络电缆,你也会遇到类似的错误问题,而且这些情况并非闻所未闻,因此,也许这是一种更好的方法,可以尝试优雅地处理这些情况。

        3
  •  3
  •   Chris K    15 年前

    从…起 Windows Power Events (MSDN) ,您必须创建一个窗口处理程序和一个空窗口来接收WM_POWERBROADCAST事件。然后,这个窗口过程可以在Java代码中调用事件函数来冒泡消息。