Преобразование и сравнение микросекунд и миллисекунд

Как я могу преобразовать микросекунды в миллисекунды и позволить сравнить метки времени вычитанием? Пример:

int t1 = (int)timeGetTime();    
int t2 = (int)timeGetTime()+40;
// now t1 - t2 < 0 which means that t1 < t2.

Эта логика не будет работать при делении временных стоимостей на 1 000, для преобразования микросекунд в миллисекунды.

Править

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

1
задан AareP 20 November 2011 в 21:01
поделиться

3 ответа

Разрешение таймеров часов в Windows ограничено примерно 10 миллисекундами, поэтому вы никогда не сможете получить значения времени с точностью до микросекунд.

Если ваши значения времени поступают из другого источника, способного обеспечить такое разрешение, то принимайте значения в микросекундах. Умножение на 1000 или деление int на 1000 не даст вам лучшего разрешения, это просто изменит масштаб вашего сравнения.

1
ответ дан 3 September 2019 в 01:12
поделиться

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

Вы можете использовать Windows API, чтобы проверить, насколько вы можете сделать это детально.

QueryPerformanceFrequency (& ticksPerSecond); QueryPerformanceCounter (& tick);

Эти две функции помогут вам в этом. Взгляните на статьи MSDN , чтобы узнать больше. :)

0
ответ дан 3 September 2019 в 01:12
поделиться

Почему бы не умножить значения миллисекунд на 1000, чтобы сравнивать в микросекундах? Или же вместо этого использовать числа с плавающей запятой.

1
ответ дан 3 September 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: