Как узнать, когда пользователь помещает ОС в режим сна или пробуждает его [дубликат]

попробовал это на Ubuntu и другом linux varian, SELECT @@version и отлично работает.

6
задан Alexander Ljungberg 31 July 2009 в 19:05
поделиться

3 ответа

Вы можете обнаружить пробуждение, периодически сравнивая текущее системное время с предыдущим системным временем.

Изменить: вот пример, который выглядит так, что это поможет вам определить, когда машина будет спать: http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907

7
ответ дан rob 21 August 2018 в 18:13
поделиться
  • 1
    Жаль, что это невозможно сделать без JNI, но ссылка кажется хорошим началом. – Alexander Ljungberg 1 August 2009 в 01:32
  • 2
    Да, JNI может быть большой проблемой для разработки и отладки. Мы обнаружили, что ключ состоит в том, чтобы сохранить как можно большую логику в Java, и просто использовать JNI в качестве моста для выполнения низкоуровневых вызовов API C. – rob 3 August 2009 в 21:21

Вы могли бы просто JNI или JNA улавливать события сна / пробуждения из ОС.

Из Windows Power Events (MSDN) вам нужно было бы создать обработчик окна и нулевое окно для получения событий WM_POWERBROADCAST. Эта процедура окна может затем вызвать функцию события в вашем Java-коде, чтобы пузырить сообщение вверх.

2
ответ дан Chris K 21 August 2018 в 18:13
поделиться

Я знаю, что это не совсем то, что вы ищете, но, возможно, правильным ответом является попытка написать код с предположением, что ваши сокеты не обязательно будут оставаться на месте. Существует множество причин, по которым может произойти сбой в соединении, например, поскольку БД снимается для обслуживания или потому, что кто-то сработал по вашему кабелю Ethernet. Я думаю, что у вас были бы подобные проблемы с ошибками, если кто-то вытащил сетевой кабель во время работы вашего приложения, и это не неслыханные условия, поэтому, возможно, это лучший подход, чтобы попытаться обработать эти условия изящно.

3
ответ дан jprete 21 August 2018 в 18:13
поделиться
  • 1
    Если база данных рушится или кто-то тянет кабель, я думаю, что сообщения об ошибках будут действительно в порядке! – Alexander Ljungberg 31 July 2009 в 17:37
  • 2
    Нет, если запрос был возмещен. Иногда это так, иногда это не так. Иногда это преходящее, так что пользователь никогда не замечает, но сама система делает. Вы должны уметь обрабатывать это событие. – Chris K 31 July 2009 в 19:12
  • 3
    Я использовал C3PO, чтобы сделать именно это, его способность проверять соединения, прежде чем возвращать им приложение из пула. – Simon Gibbs 12 August 2009 в 14:04
Другие вопросы по тегам:

Похожие вопросы: