Вопрос относительно счетчика часов, созданного clock()
из <ctime>
. (Использование clock()
рассматривается в других вопросах)
В моей системе clock_t
- это псевдоним для long
, максимальное значение которого согласно <climits>
моего компилятора составляет 2147483647.
clock_t delay = clock_t(10) * CLOCKS_PER_SEC;
clock_t start = clock();
while(clock() - start < delay); //Note Semi-colon here makes this null statement
std::cout << clock();
Запустив это, я получаю примерно 10060. Что соответствует CLOCKS_PER_SEC
, равному #define
d (для моей системы) как 1000.
Итак, если есть 1000 CLOCKS_PER_SEC
, тогда 2147483647/1000 = 2147483,647 секунды, что составляет примерно 24-25 дней.
Я не уверен, действительно ли это поведение определяется C ++, но я отмечаю, что обычное поведение при превышении лимита long
заключается в переносе в отрицательный конец.
Например,
long m = long(2147483647);
std::cout << ++m << std::endl;
Выведет: -2147483648
Итак, предположим, что программа работала долгое время перед инициализацией start
, а start
случайно инициализирована значением 2147483647 (максимально возможное значение long
).
На этом этапе я предполагаю, что мы начнем обертывать значения, возвращаемые clock()
, чтобы получить такие значения, как -2147482649, поскольку мы снова приближаемся к 2147483647. Итак, мой исходный код, вероятно, займет очень много времени, чтобы завершить цикл, намного дольше, чем предполагалось.
Реальное поведение? Следует ли использовать этот стиль паузы только для задержек меньше определенной величины? Есть ли какая-то другая проверка, которая должна быть сделана, чтобы сделать это «безопасным»?