Это не то, что часы считается плохим, обязательно, так как это не определилось работать так, как люди часто думают. А именно, не указано, чтобы произвести . настенный часы, или «реальный», время
clock()
определяется, чтобы сказать вам, сколько процессорного времени используется,., используя большее количество потоков использует больше процессорного времени, спальные потоки используют меньше времени
Во-вторых, не все платформы имп придерживаться такого же поведения; на некоторых платформах реализовано clock()
, как если бы оно предназначалось для настенных часов. Таким образом, переносимый код не может использовать его для любой цели.
Однако, одна из причин clock()
может считаться плохим, даже для непереносимых использования, является то, что он имеет «тип-небезопасным» API, который не различает между точками времени и времени продолжительности, и которая делает не безопасно управлять единицами времени для вас. Например, используя свой API, можно легко смешать значения, которые должны представлять микросекунды со значениями, предназначенными для представления миллисекунд.
API C++ 11 <chrono>
намного лучше об этом. Одна из проблем заключается в том, что <chrono>
не имеет тактовых импульсов ЦП. Если вы хотите настенные часы, тогда std::chrono::steady_clock
- лучший выбор; Он имеет API-интерфейс типа «тип», и он определен, чтобы продвигаться «с постоянной скоростью в реальном времени».
http://coliru.stacked-crooked.com/a/6df6c71a436092e3
Спящий 4 потока в течение 0,1 секунд каждый.
Истекшее время на стене: 0.101213 секунд.
Истекшее время процессора: 0 секунд.
Скручивание 4 нитей по 0,1 секунды каждый.
Истекшее время на стене: 0.100304 секунд.
Истекшее время процессора: 0,4 секунды.
И для развлечения здесь это часы <chrono>
стиля для использования std::clock()
:
#include <chrono>
#include <ratio>
#include <ctime>
struct cpu_clock {
using rep = std::clock_t;
using period = std::ratio<1, CLOCKS_PER_SEC>;
using duration = std::chrono::duration<rep, period>;
using time_point = std::chrono::time_point<cpu_clock, duration>;
static const bool is_steady = false;
static time_point now() noexcept {
return time_point{duration{std::clock()}};
}
};
Это может представлять интерес: http://en.cppreference.com/w/cpp/chrono/c/clock – Galik
@Galik сделать ответ из вашей ссылки так, что мы можем проголосовать! – Christophe
@Galik функции выглядят аккуратно, но у меня нет этого заголовка. Можно ли скачать его? –
Pilpel