У меня вопрос по поводу функции GetTickCount, У меня есть два вызова этой функции в моем коде с несколькими командами между ними, и функция в обоих вызовах возвращает одинаковое количество. то есть
var1 = GetTickCount();
code
:
:
var2 = GetTickCount();
var1 и var2 имеют одинаковые значения.
может кто-то помочь?
Предполагая, что это вызов Windows GetTickCount , это вполне разумно:
Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 от миллисекунд до 16 миллисекунд.
Обратите внимание, что для начала это всего лишь миллисекунды - а в наши дни вы можете сделать очень много за миллисекунду.
В документации говорится:
Если вам нужен таймер с более высоким разрешением, использовать мультимедийный таймер или таймер высокого разрешения .
Может быть, QueryPerformanceCounter
будет более подходящим?
Если вы имеете в виду вызов Windows API, прочтите это . Я предполагаю, что вы пытаетесь отсчитать короткий интервал, поэтому этот абзац актуален. Вы рассчитываете что-то короче этого интервала? Если это так, возможно, вместо этого загляните в QueryPerformanceCounter.
Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 от миллисекунд до 16 миллисекунд. В разрешение GetTickCount функция не зависит от корректировки, внесенные Функция GetSystemTimeAdjustment.
Из MSDN
Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 от миллисекунд до 16 миллисекунд. В разрешение GetTickCount функция не зависит от корректировки, внесенные Функция GetSystemTimeAdjustment.
Истекшее время сохраняется как DWORD. ценность. Поэтому время подойдет около нуля, если система запущена непрерывно в течение 49,7 суток. Избегать эту проблему используйте GetTickCount64 функция. В противном случае проверьте наличие состояние переполнения при сравнении раз.
Если вам нужен таймер с более высоким разрешением, использовать мультимедийный таймер или таймер высокого разрешения.
GetTickCount имеет разрешение в одну миллисекунду (на практике это несколько миллисекунд). Весьма вероятно, что функции, которые вы вызываете между ними, занимают значительно меньше 1 миллисекунды.
Если вы выберете маршрут QueryPerformanceCounter, вам нужно следить за аппаратно-зависимой странностью . Прошло какое-то время, поэтому я не знаю, случаются ли до сих пор подобные вещи.
Вы также можете взглянуть на эту ссылку , поскольку там есть хороший пример приложения, которое сравнивает QueryPerformanceCounter, GetTickCount и TimeGetTime