Функция GetTickCount - PullRequest
       47

Функция GetTickCount

7 голосов
/ 11 августа 2010

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

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

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

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

Ответы [ 6 ]

16 голосов
/ 11 августа 2010

Если предположить, что это вызов Windows GetTickCount , это вполне разумно:

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

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

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

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

Возможно, QueryPerformanceCounter будет более уместным?

6 голосов
/ 11 августа 2010

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

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

5 голосов
/ 11 августа 2010

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

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

2 голосов
/ 11 августа 2010

С MSDN

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

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

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

1 голос
/ 11 августа 2010

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

0 голосов
/ 31 августа 2017
dwStartTimer=GetTickCount();
dwEndTimer=GetTickCount();
while((dwEndTimer-dwStartTimer)<wDelay)//5000 milli seconds delay
{
    Sleep(200);
    dwEndTimer=GetTickCount();
    if (PeekMessage (&uMsg, NULL, 0, 0, PM_REMOVE) > 0) //Or use an if statement
    {
        TranslateMessage (&uMsg);
        DispatchMessage (&uMsg);
    }
}
...