Зависит от того, какую систему вы находитесь. Он может использовать 32 + или 64-битный clock_t
. Он определенно перевернется, но если он будет 64-битным, все будет хорошо в течение некоторого времени, прежде чем он перевернется - 2 микросекунды по-прежнему очень долгое время (около 2 секунд, а их около 2 секунд в день, так что 2 дней - это около 2 , или миллион, лет ...;)
конечно, в 32-битной системе, мы имеем около 2 = 4096 секунд при разрешении микросекунд. Час 3600 с = около 1h10m.
Однако другая проблема в некоторых системах заключается в том, что clock()
возвращает процессорное время, поэтому, если вы спите, оно не будет считаться временем в clock()
.
И, конечно, хотя CLOCKS_PER_SEC
может быть 1000000, это не означает, что вы получаете результат в микросекундах - во многих системах он «скачет» на 10000 единиц за раз.
Таким образом, «возможно, плохая идея».
Если у вас есть C++ 11 в системе, используйте std::chrono
, которая имеет несколько вариантов для хронометража, которые достаточно хороши для большинства целей (но изучить std::chrono
docs)
Пример кода:
#include <iostream>
#include <chrono>
#include <unistd.h> // replace with "windows.h" if needed.
int main()
{
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
// 10 seconds on a unix system. Sleep(10000) on windows will be the same thing
sleep(10);
end = std::chrono::system_clock::now();
int elapsed_seconds = std::chrono::duration_cast<std::chrono::seconds>
(end-start).count();
std::cout << "elapsed time: " << elapsed_seconds << "s\n";
}
Если вы беспокоитесь об этом, посмотрите на часы librt clock_gettime (CLOCK_MONOTONIC, ...). Это может быть больше в соответствии с тем, что вы хотите, при условии, что вам разрешено использовать библиотеку librt. –