Функция GetTickCount

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

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

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

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

6 ответов


предполагая, что это Windows GetTickCount звоните, это вполне разумно:

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

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

документы переходят к скажи:

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

возможно QueryPerformanceCounter было бы более уместно?


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

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


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

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


с 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, 0, PM_REMOVE) > 0) //Or use an if statement
    {
        TranslateMessage (&uMsg);
        DispatchMessage (&uMsg);
    }
}