#winapi
#winapi
Вопрос:
Похоже, что сохранение времени имеет разные максимальные значения на разных компьютерах. например, на моем столе оно 32 бит, в то время как в другом с той же ОС (win7 64bit) оно имеет 16 бит.
Есть ли какой-либо способ определить максимальное значение?
Спасибо.
Комментарии:
1.
TimeRemaining
является беззнаковым long (ULONG), который никогда не является 16-разрядным ни в одной современной версии Windows. Откуда вы получаете свою информацию?2. Простая печать на консоль значения во время работы пользователя с компьютером. как я уже сказал, в некоторых случаях это будет 4294967295, а в других — меньшее значение. насколько я помню, это было 32767. Но предположим, что я полностью отклоняюсь от графика с 16 и 32 битами. мой вопрос в том, как я могу определить, какое максимальное значение будет на каждой платформе, на которой я запускаю программу?
3. Вы нигде этого не «сказали», и «простая печать на консоль» не сообщает вам, является ли целое число 16/32 битным. ULONG является 32-разрядным целым числом без знака как в Win32, так и в Win64, и имеет максимальное значение 4294967295 на обеих платформах; оно не меняется. 32-разрядное целое число без знака — это 32-разрядное целое число без знака. Тип объявлен как ULONG во всех версиях Windows.
4. Либо у меня нет умственных способностей, чтобы понять, что вы говорите. или я просто написал вопрос настолько плохо, что его нельзя понять четко. Я НЕ спрашиваю, какое максимальное значение 32 или 16 бит. Я спрашиваю, есть ли способ определить, каким будет значение не в режиме ожидания (max) для сохранения времени в каждой (win7) уникальной среде, поскольку это не одно и то же.
5. Из описания кажется, что вы могли бы определить максимум, изучив
Idleness
поле. Это просто возможно, чтоTimeRemaining
равно(Idleness * max)/100
или что-то в этом роде. По крайней мере, это то, что я бы попробовал. Реальный вопрос, однако, заключается в том, почему должно иметь значение максимальное значение.
Ответ №1:
После дальнейшего изучения выясняется, что значение non idle — это значение системного таймера ожидания. обратите внимание, что в ноутбуках оно может меняться с настроек постоянного тока на переменный, поэтому вам также нужно это проверить.
Как получить значение таймера сна, я не мог понять. но это становится сложнее, предположим, что ваш таймер сна находится на 900, что происходит после 900 секунд простоя, так это то, что значение сбрасывается до uint max и оттуда уменьшается. но как только пользователь введет данные, это значение вернется к 900.
Решение, которым я закончил: проверяйте сохранение времени каждые несколько секунд, если оно остается неизменным для последних N проверок, я буду считать, что это текущее значение, не являющееся праздным.
Количество проверок, которые вам нужно будет выполнить перед установкой нового значения non idle, зависит от интервала ваших проверок, поскольку значение сохранения времени обновляется каждые несколько секунд. в моем случае я проверяю каждые 10 секунд и устанавливаю его на 5 идентичных проверок.
Это решение не идеально, потому что в моем приложении я завершаю определенный процесс, если предполагается, что система находится в режиме ожидания. Я могу резко остановить этот процесс, когда система не простаивает, потому что мне требуется не менее 50 секунд, чтобы убедиться, что система больше не простаивает.