Когда я запускаю этот код
#include <iostream>
#include <boost/thread.hpp>
#include <boost/chrono/thread_clock.hpp>
void foo() {
boost::this_thread::sleep(boost::posix_time::microseconds(500));
}int main() {
boost::chrono::thread_clock::time_point start = boost::chrono::thread_clock::now();
foo();
boost::chrono::thread_clock::time_point stop = boost::chrono::thread_clock::now();
std::cout << "duration = "<< boost::chrono::duration_cast<boost::chrono::microseconds>(stop-start).count()
<< " microsec\n";
}
Я получаю следующий вывод:
duration = 121 microsec
duration = 121 microsec
duration = 110 microsec
duration = 114 microsec
Также, когда я заменяю 500
с другим значением, например 200
, выход всегда рядом 100
, Компилирование с -O3
, Почему сроки не согласованы?
PS: я читал это sleep
устарела, но когда я заменяю его
boost::this_thread::sleep_for(boost::chrono::microseconds(200));
выходной сигнал находится в диапазоне ~ 20 микросекунд.
Я действительно упускал из виду нечто очевидное. документация говорит:
Класс thread_clock обеспечивает доступ к реальным настенным часам потока, т.е.
реальное время процессора в вызывающем потоке.
Я думал, что настенное время — это прошедшее реальное время, в отличие от процессорного времени, которое не включает время, когда нить спит. Так или иначе, чтобы получить последовательные числа, я должен был использовать boost::chrono::system_clock
вместо.
Других решений пока нет …