2010-10-11 2 views
4

Я написал небольшой фрагмент кода, который считывает текущий заряд батареи/разрядку на моем ноутбуке. Я следовал примеру кода на this MSDN page.Прочтите текущий заряд батареи/разрядку на ноутбуке

Моя программа обновляет информацию каждые 100 мс (по вызывая функцию DeviceIoControl с IOCTL_BATTERY_QUERY_STATUS в качестве управляющего кода), но изменяется значение только для чтения через 5-10 секунд. Например, если я изменяю яркость экрана с минимального значения до максимума, скорость обновления обновляется всего через 5-10 секунд. Я использовал Visual C++ 2010 на 32-разрядной версии Windows 7.

Кто-нибудь знает, как получить в режиме реального времени чтение заряда/разрядки?

+0

Почему, по вашему мнению, неточно? Задержка может быть вызвана буферизацией заряда где-то в аппаратном обеспечении (какой-то конденсатор), и это только приводит к большей нагрузке на батарею, когда этот заряд исчерпан. –

+0

Значения, которые я получаю, верны, я просил путь (если есть), чтобы увидеть эти изменения раньше. Я не думаю, что есть конденсатор, потому что с увеличением потребляемой мощности 20 Вт задержка составляет около 8 секунд, для этого потребуется очень большой конденсатор! – user472507

ответ

4

В зависимости от точности датчика, вероятно, состояние обновляется только драйвером устройства питания каждые 5-10 секунд или при значительных изменениях.

+3

Относительно недавнее сообщение в блоге (http://blogs.msdn.com/b/oldnewthing/archive/2010/09/24/10067119.aspx) Раймонда Чена кажется уместным, даже если оно происходит в контексте другого API-вызов: «Эти уровни заряда батареи исходят от самого оборудования, поэтому вы находитесь на милость тех, кто изготовил вашу материнскую плату. Некоторые ноутбуки обновляют значения с интервалом в 1 секунду, а другие могут занимать 5 секунд или более». – TheUndeadFish

+0

Я запускаю программу на другом ноутбуке, и там я получаю обновления каждые 2-4 секунды. Я также обнаружил, что у какого-то нового ноутбука HP нет такого сенсора. – user472507

Смежные вопросы