На прошлой неделе мне нужно было протестировать несколько различных алгоритмических функций, и, чтобы упростить себе задачу, я добавил несколько искусственных засыпаний и просто измерил время на часах. Что-то вроде этого:
start = clock();
for (int i=0;i<10000;++i)
{
...
Sleep(1);
...
}
end = clock();
Поскольку аргумент сна выражается в миллисекундах, я ожидал, что общее время настенных часов составит около 10 секунд (намного больше из-за алгоритмов, но сейчас это не важно), и это действительно был мой результат.
Сегодня утром мне пришлось перезагрузить компьютер из-за новых исправлений Microsoft Windows, и, к моему удивлению, Sleep (1) занимал больше не 1 миллисекунду, а около 0,0156 секунды.
Так что результаты моих тестов были совершенно неуместными, так как общее время выросло с 10 секунд до примерно 156 секунд.
Мы протестировали это на нескольких ПК, и, очевидно, на некоторых ПК результат одного спящего режима действительно составлял 1 мс. На других ПК это было 0,0156 секунды.
Затем, внезапно, через некоторое время, время сна упало до 0,01 секунды, а через час снова до 0,001 секунды (1 мс).
Это нормальное поведение в Windows? Windows «сонная» в первые часы после перезагрузки, а затем постепенно становится более детализированной? Или есть какие-то другие аспекты, которые могут объяснить изменение поведения?
Во всех моих тестах ни одно другое приложение не работало одновременно (или: по крайней мере, не занимало процессор).
Любые идеи?
ОС - Windows 7.