Если вы хотите найти истекшее время, этот метод будет работать до тех пор, пока вы не перезагрузите компьютер между началом и концом.
В Windows используйте GetTickCount (). Вот как:
DWORD dwStart = GetTickCount();
...
... process you want to measure elapsed time for
...
DWORD dwElapsed = GetTickCount() - dwStart;
dwElapsed теперь число прошедших миллисекунд.
В Linux используйте clock () и CLOCKS_PER_SEC , чтобы сделать то же самое.
Если вам нужны временные метки, которые длятся через перезагрузки или на разных компьютерах (что действительно потребовало бы довольно хорошей синхронизации), используйте другие методы (gettimeofday ()).
Кроме того, по крайней мере в Windows вы можете получить намного лучшее, чем стандартное разрешение по времени. Обычно, если вы вызываете GetTickCount () в узком цикле, вы увидите, что он скачет на 10-50 при каждом изменении. Это из-за кванта времени, используемого планировщиком потоков Windows. Это примерно столько времени, сколько каждый поток запускает перед переключением на что-то другое. Если вы делаете:
timeBeginPeriod(1);
в начале вашей программы или процесса и:
timeEndPeriod(1);
в конце, тогда квант изменится на 1 мс, и вы получите намного лучшее временное разрешение при вызове GetTickCount (). Тем не менее, это вносит небольшие изменения в то, как весь ваш компьютер выполняет процессы, так что имейте это в виду. Тем не менее, в любом случае Windows Media Player и многие другие делают это регулярно, поэтому я не слишком беспокоюсь об этом.
Я уверен, что, вероятно, есть какой-то способ сделать то же самое в Linux (возможно, с гораздо лучшим управлением, или, может быть, с квантами менее миллисекунды), но мне еще не нужно было делать это в Linux.