странное поведение cout << Boost :: posix_time - PullRequest
3 голосов
/ 16 февраля 2011

Я хочу рассчитать время цикла, которое требуется для завершения.

Я делаю что-то вроде:

ptime before = second_clock::local_time(); //get current time
cout << "Started: "<< before << " ... processing ...";
while(foo) {
....
}
ptime after = second_clock::local_time(); // get Current time
cout << "Processing took" << after - before;

Будет выведено: Начало: «некоторое время»

затем я жду окончания цикла, прежде чем вижу "... обработка ..."

Почему это? Сначала он должен просмотреть весь текст, а затем перейти к циклу.

Если я изменю первый cout на:

cout << "Начато:" << до; </p>

Он даже не показывает мне время до окончания цикла.

Это самая странная вещь, которую я когда-либо видел ... кажется, что-то не так с моим пониманием времени ускорения.

Я также использую в своем коде boost :: threads, но рабочие циклы в цикле, поэтому я не понимаю, как это может быть связано с этой проблемой.

Может ли кто-нибудь помочь мне здесь?

1 Ответ

2 голосов
/ 16 февраля 2011

ostream s, включая cout, используют буферы, что означает, что реализация может подождать, чтобы посмотреть, отправите ли вы больше данных, прежде чем действовать на самом деле.

Чтобы получить cout для печати раньше, используйте

std::cout << std::flush;

или используйте std::endl, что эквивалентно "\n", за которым следует std::flush.

...