clock
было предложено несколько раз.Это имеет две проблемы.Прежде всего, оно часто не имеет разрешения даже близко к миллисекунде (10-20 мс, вероятно, более распространено).Во-вторых, некоторые его реализации (например, Unix и аналогичные) возвращают время ЦП, в то время как другие (например, Windows) возвращают время стены.
Вы действительно не сказали, хотите ли вы время стены или время ЦП, котороезатрудняет дать действительно хороший ответ.В Windows вы можете использовать GetProcessTimes
.Это даст вам время ядра и пользовательского процессора напрямую.Он также сообщит вам, когда был создан процесс, поэтому, если вам нужны миллисекунды времени стены с момента создания процесса, вы можете вычесть время создания процесса из текущего времени (GetSystemTime
).QueryPerformanceCounter
также упоминалось.У этого есть несколько своих странностей - например, в некоторых реализациях он извлекает время из счетчика цикла ЦП, поэтому его частота меняется, когда / если скорость ЦП изменяется.Другие реализации считывают данные с таймера 1.024 МГц материнской платы, который не изменяется в зависимости от скорости процессора (а условия, в которых они используются, не совсем очевидны).
В Unix выможно использовать GetTimeOfDay
, чтобы просто получить время на стене с (по крайней мере, возможностью) относительно высокой точности.Если вам нужно время для процесса, вы можете использовать times
или getrusage
(последний является более новым и дает более полную информацию, которая также может быть более точной).
Итог: как я уже сказал в своем комментарии, нет способа получить то, что вы хотите, мобильно.Поскольку вы еще не сказали, хотите ли вы использовать процессорное время или время простоя, даже для конкретной системы, правильного ответа нет.Тот, кого вы «приняли» (clock()
), обладает тем преимуществом, что доступен практически для любой системы, но то, что он возвращает, также варьируется в большинстве случаев.