Отставание между GetTickCount () и timeGetTime () изменяется между выполнением моей тестовой программы

я знаю это GetTickCount() а также timeGetTime() имеют разные разрешения и что разрешение таймера timeGetTime() можно установить с помощью звонков на timeBeginPeriod(),

Насколько я понимаю, увеличение разрешения таймера с помощью timeBeginPeriod() уменьшает время сна системы между последовательными приращениями к счетчику позади timeGetTime(),

Скажем, разрешение по времени GetTickCount() 16 мс (его значение увеличивается на 16 каждые 16 мс), и я установил разрешение timeGetTime() до 1 мс (его значение увеличивается на 1 каждые 1 мс). Мой вопрос о времени, в которое счетчик тиков обновляется. Я написал небольшую тестовую программу, чтобы увидеть, какое отставание имеет таймер за счетчиком тиков в момент увеличения счетчика тиков. С лагом я имею ввиду разницу GetTickCount()timeGetTime() прямо когда GetTickCount() Обновления. Например. задержка 0 будет означать, что счетчик обновляется с 16 до 32, когда функция timeGetTime() возвращает 32, отставание 4 означает, что счетчик тиков увеличивается с 16 до 32, когда timeGetTime() возвращает 28. Вот код:

#include <windows.h>
#include <iostream>
#include <vector>

int main(void) {

// set time resolution to 1ms
timeBeginPeriod(1);

// measure tick counter interval for low resolution
std::vector<int> difftime(200);
int lasttick;

for (int i = 0; i < 200; ++i) {
lasttick = GetTickCount();
while (!(GetTickCount()-lasttick)) ;
difftime[i] = GetTickCount() - timeGetTime();
}

// reset timer resolution
timeEndPeriod(1);

// printout
std::cout << "timediff" << std::endl;
for (int i = 0; i < 200; ++i) {
std::cout << difftime[i] << std::endl;
}

return 0;
}

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

Сначала я подумал, что увеличение разрешения timeGetTime()-Timer может вызвать это, вводя некоторую случайную задержку между двумя, но когда я оставляю разрешение в 1 мс между выполнениями, задержка все еще варьируется между выполнениями.

Кто-нибудь знает, какой механизм вызывает такое поведение?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]