Функция GetTickCount

У меня есть вопрос относительно функции GetTickCount, У меня есть два вызова этой функции в моем коде с несколькими командами между ними, и функция в обоих вызовах возвращает одинаковый счет. то есть.

var1 = GetTickCount();
code
:
:
var2 = GetTickCount();

var1 и var2 имеют в нем одинаковые значения.

может кто-нибудь помочь?

6 ответов

Предположим, что это вызов Windows GetTickCount, который является вполне разумным:

Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 миллисекунды до 16 миллисекунд.

Обратите внимание, что это всего лишь миллисекунды для начала - и вы можете сделать очень много в миллисекундах в наши дни.

В документах говорится:

Если вам нужен таймер с более высоким разрешением, используйте мультимедийный таймер или таймер с высоким разрешением.

Возможно, QueryPerformanceCounter будет более подходящим?


Если вы идете по маршруту QueryPerformanceCounter, вам нужно следить за аппаратно-зависимым wierdness. Это было некоторое время, поэтому я не знаю, все еще происходит.

Вы также можете взять посмотреть на эту ссылку, так как у нее есть хорошее примерное приложение, которое сравнивает QueryPerformanceCounter, GetTickCount и TimeGetTime


Если вы обращаетесь к вызову Windows API, прочитайте this. Я бы предположил, что вы пытаетесь сделать короткий промежуток времени, поэтому этот параграф имеет значение. Вы считаете что-то короче этого интервала? Если это возможно, посмотрите на QueryPerformanceCounter.

Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 миллисекунды до 16 миллисекунд. разрешение GetTickCount на функцию не влияет корректировки, сделанные Функция GetSystemTimeAdjustment.


От MSDN

Разрешение GetTickCount функция ограничена разрешением системного таймера, который обычно в диапазоне 10 миллисекунды до 16 миллисекунд. разрешение GetTickCount на функцию не влияет корректировки, сделанные Функция GetSystemTimeAdjustment.

Истекшее время хранится как DWORD стоимость. Поэтому время будет завершено вокруг нуля, если система запущена непрерывно в течение 49,7 дней. Избегать эта проблема, используйте GetTickCount64 функция. В противном случае проверьте переполнения при сравнении раз.

Если вам нужен таймер с более высоким разрешением, используйте мультимедийный таймер или таймер с высоким разрешением.


GetTickCount имеет разрешение одной миллисекунды (на практике это несколько миллисекунд). Очень вероятно, что функции, которые вы вызываете между ними, занимают значительно меньше 1 миллисекунды.


dwStartTimer=GetTickCount(); dwEndTimer=GetTickCount(); while((dwEndTimer-dwStartTimer)<wdelay) 5000="" milli="" seconds="" delay="" {="" sleep(200);="" dwendtimer="GetTickCount();" if="" (peekmessage="" (&umsg,="" null,="" 0,="" pm_remove)=""> 0) //Or use an if statement { TranslateMessage (&uMsg); DispatchMessage (&uMsg); } }
</wdelay)>

licensed under cc by-sa 3.0 with attribution.