Какие условия могут привести к тому, что clock() вернет -1 (т.е. сбой)?

Я использую clock() из time.h, чтобы предоставить приблизительный механизм прошедшего времени для операции, которую я хочу выполнять примерно раз в секунду. (Я, вероятно, хочу использовать time(), но большая часть вопроса остается в силе, поскольку time() также возвращает -1 в случае сбоя). Точность не критична, так как другие пороги достаточно высоки, так что если бы это было отсутствовало даже до полсекунды, все было бы в порядке.

Функция возвращает -1 в случае сбоя, и в настоящее время, если я обнаруживаю сбой, я повторяю часы до 100 раз в течение следующей секунды.

Какие причины, помимо физического сбоя оборудования, могут привести к сбою clock() или time()? Если после повторных попыток он по-прежнему равен -1, могу ли я предположить, что в системе возникла «большая проблема» (и поэтому я могу изящно выйти)?


person Stephen    schedule 24.08.2011    source источник
comment
Это долгий путь, но содержит ли значение errno что-нибудь полезное после того, как clock вернет -1?   -  person Adam Rosenfield    schedule 24.08.2011
comment
ошибка в ОС? ошибка в библиотеке, реализующей обертку вокруг ОС? в случае системы реального времени невозможность выполнить запрос в настроенное время. отсутствуют возможности использования часов, настроенных в ОС для clock(). слишком много последующих вызовов clock() для ОС, в которых это сбой. и я думаю, что могу придумать эзотерические. Ваш реальный вопрос, может быть, нужно ли вам действительно заботиться об этом?   -  person PlasmaHH    schedule 24.08.2011
comment
@PlasmaHH Если вы преобразуете это в ответ, я могу хотя бы проголосовать за него.   -  person Stephen    schedule 24.08.2011


Ответы (3)


Моя удобная справочная страница гласит следующее:

Если используемое время процессора недоступно или его значение не может быть представлено, функция должна вернуть значение (clock_t)-1.

Обратите внимание, что clock() возвращает значение, основанное на использовании процессорного времени (во всем, кроме Windows), если вы хотите использовать настенные часы, используйте вместо этого time().

person Hasturkun    schedule 24.08.2011
comment
И в зависимости от системы пункт cannot be represented может не применяться. Например, в 32-разрядной версии Linux clock_t зацикливается. Обратите внимание, что возвращаемое значение в принципе может быть (clock_t)-1, если вы вызовете его в нужный момент, хотя я не думаю, что это может произойти в Linux. - person Keith Thompson; 24.08.2011

От 1_

Если используемое процессорное время недоступно или его значение не может быть представлено, функция возвращает значение (clock_t)-1

Похоже, что соответствующая реализация может просто вернуть это и покончить с этим.

person Flexo    schedule 24.08.2011

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

person Stephen    schedule 31.08.2011