Я пытался запрограммировать класс Timer (не подозревая, что boost был один), а затем, когда это не сработало, я попытался просто вывести значение clock(), используя этот код :Функция C++ clock(), дающая неправильные значения
#include <ctime>
#include <iostream>
int main()
{
for(int i = 0; i < 50; ++i)
{
std::cout << std::clock() << " ";
}
return 0;
}
Когда я запускаю программу, я получаю серию из 0s. У меня есть аналогичный опыт при использовании функций спящего потока с ускорением, чтобы растянуть время дольше (хотя через несколько секунд он перескакивает от 0 до 10 000 и продолжает выводить 10 000).
Я запускаю Gentoo Linux. Это платформа? C++ вещь? Что происходит?
Редактировать: Странно прыжок на 10000 происходит после ряда секунд, а не миллисекунды. Когда я спал со своей нитью в течение секунды, понадобилось пять или шесть секунд, чтобы добраться до 10000. Однако, если я правильно понимаю. Время, затрачиваемое нитью, не влияет на счет часов()? (Что будет иметь смысл, почему это будет выполнение тактовых циклов, если он спит?)
Точно. Когда ваш поток спит, система не назначает его CPU, а счетчик 'clock()' заморожен. В вашем примере это только короткие промежутки времени между пробуждением и сном, которые считаются. – slacker
Обратите внимание, что clock() возвращает время процессора для всей программы, суммируя все потоки. См. Http://stackoverflow.com/a/5035854/13422 –