boost :: thread_sleep против boost :: chrono :: thread_clock не согласован

Когда я запускаю этот код

#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 микросекунд.

4

Решение

Я действительно упускал из виду нечто очевидное. документация говорит:

Класс thread_clock обеспечивает доступ к реальным настенным часам потока, т.е.
реальное время процессора в вызывающем потоке.

Я думал, что настенное время — это прошедшее реальное время, в отличие от процессорного времени, которое не включает время, когда нить спит. Так или иначе, чтобы получить последовательные числа, я должен был использовать boost::chrono::system_clock вместо.

0

Другие решения

Других решений пока нет …