Windows 8.1: как определить «истинное» время работы?

563
seagull

Пожалуйста, прочитайте внимательно; это не обычный вопрос доступности.

Я склонен не выключать компьютер как таковой, а вместо этого переводить его в режим сна. Это ускоряет загрузку и позволяет использовать WOL. Различные методы uptime (sysinfo, uptime.exe, диспетчер задач и т. Д.) Будут показывать время с момента последней полной загрузки, что означает, что время, затраченное на сон, учитывается. Я ищу истинное время работы; то есть, только время с момента последней загрузки, которое мой компьютер провел без сна.

3
Sleep/ wake/ shutdown events are all logged in the system event log. You could probably do some calculations using the times of these events. I'm not going to attempt to try and write it for you though. DavidPostill 8 лет назад 2

3 ответа на вопрос

1
LPChip

Нет программного обеспечения, которое делает это, поэтому единственный способ, которым вы могли бы сделать это, - это написать скрипт, который в основном дает переменную +1 каждую секунду (или минуту) и имеет способ прочитать значение переменной, Если ваш компьютер находится в режиме гибернации / сна / и т. Д., Скрипт не работает, поэтому счетчик не увеличивается.

Вероятно, это повлияет на систему, если такой скрипт постоянно работает в фоновом режиме, поэтому вопрос в том, насколько сильно вы этого хотите?

(причина воздействия на сценарий) Чем дольше выполняется сценарий, тем выше становится число, а действительно высокое значение означает, что для хранения требуется больше памяти. (речь идет о значениях, которые не могут быть целыми числами (65535), но я полагаю, что если вы достигнете такого высокого уровня, ваша система должна работать и работать в течение дней / недель. Конечно, вы можете написать свой скрипт для подсчета дней и сбросить значение, которое устранит это, но если тогда ваш сценарий будет проходить больше кода в своем цикле, который сам по себе также будет влиять на него, даже если он будет небольшим.

Solid answer, thanks. Shame this isn't catered for natively though. seagull 8 лет назад 0
How much storage do you expect it to need? 2³² seconds is 136 years. 2³² minutes is, obviously, 60 times as much (over 8160 years). Scott 8 лет назад 0
1
Steven

Windows генерирует системное событие для выхода из спящего режима (Код события: 1, Источник: Power-Troubleshooter). Это событие содержит время сна и бодрствования.

Wake Event

Источник: Wake Source - чтение журнала просмотра событий - Справочные форумы Windows 7

Чтобы определить значение «истинного времени безотказной работы», определите время последней загрузки (из источников, которые вы упомянули), затем вычтите время, потраченное на сон из любых последующих событий пробуждения.

Примечание. Вы можете создать приложение для запроса журнала событий с помощью библиотек .NET (не по теме для суперпользователя).

(1) While this link may answer the question, it is better to include a more detailed description of the answer here and provide the link for reference. Link-only answers can become nearly useless if your link goes down. (2) You seem to be suggesting a GUI interface to a heap of raw data. Are you suggesting that the user manually transcribe all the sleep/wake event times since the last boot into a calculator and then crunch the numbers him/herself to get the total time that (s)he is looking for? Or do you know of some way that a script can access these data? Scott 8 лет назад 1
See simplified answer. Steven 8 лет назад 0
0
Scott

Насколько вы гибки в своем определении «истинного времени работы»? Вариант ответа LPChip в это писать запланированные задачи, которые запускаются блокировками рабочих станций и рабочие станции разблокировки, а затем сделать очевидную математику.

И, в случае, если математика не очевидна:

  1. Отслеживайте два значения: «логическое» время загрузки и совокупное время работы. Только один из них будет действителен одновременно. Поэтому, возможно, вам также нужен флаг, чтобы отслеживать, какой из них действителен, хотя это может быть практически определено контекстом.
  2. Я предполагаю, что вы также хотели бы событие, которое запускается при загрузке системы, или иметь какой-то другой механизм для инициализации «логического» времени загрузки с фактическим временем загрузки.
  3. Когда рабочая станция заблокирована, вычтите логическое время загрузки из текущего времени и сохраните его как совокупное время работы.
  4. Когда рабочая станция разблокирована, вычтите совокупное время безотказной работы из текущего времени и сохраните его как логическое время загрузки.
  5. По запросу вычтите логическое время загрузки из текущего времени и сообщите об этом как «истинное» время работы. (Это даст вам общее время, в течение которого компьютер был разблокирован.)

Так, например,

  1. Если вы выполняете полную загрузку в 9 часов утра, это экономит 9 часов как логическое время загрузки.
  2. Если вы заблокируете машину в полдень, это сэкономит 3 часа (полдень - 9 утра) в качестве совокупного времени безотказной работы.
  3. Если вы разблокируете машину в 13:00, это экономит 10:00 (13:00 - 3 часа) как логическое время загрузки.
  4. Если вы запрашиваете время безотказной работы в 18:00, это означает 8 часов
    (18:00 - 10:00 = (полдень - 9:00) + (18:00 - 13:00).)

Если вы можете понять, как запускать задачи во время сна и пробуждения, сделайте это, и вы получите именно то, о чем вы просили. (Но перевод машины в спящий режим вызовет задачу блокировки, и я предполагаю, что ваша система настроена на разблокировку после пробуждения.)

Я хотел бы подчеркнуть, что вам действительно нужно рассчитать время безотказной работы для этих событий, а не запускать сценарий, который выполняется в фоновом режиме при выполнении запланированной задачи, иначе вы столкнетесь с серьезными проблемами с производительностью. Я написал сценарий, который выполнял бы простую математику как запланированное задание, и, если этот сценарий выполнялся, я не мог бы играть в игру и записывать ее с помощью fraps, так как у меня возникало отставание. Когда я не запускал эту запланированную задачу, все было хорошо. И как ни странно, если бы я вручную запустил сценарий, затем играл в свою игру и записывал с помощью фрапс, это тоже было нормально. LPChip 8 лет назад 0

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