2008-11-12 4 views
4

Я хочу написать небольшую программу, которая должна напечатать что-то вродеsleep() слишком рано задерживает мою программу. Что я делаю не так?

тестирования CPU ... сделано
тестирования оперативной памяти ... сделано

и так далее.

я написал следующую программу в C:

printf("testing RAM...\t\t"); 
sleep(sleep_time); 
printf("done\n\n"); 

printf("testing HDD...\t\t"); 
sleep(sleep_time); 
printf("done\n\n"); 

где sleep_time равно 2.

Однако, вместо печати "тестирования CPU ...", а затем ждать, тогда печать "сделано" , он сначала ждет, затем печатает всю строку, что не совсем то, что я имел в виду.

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

Я использую XCode 3.1 на OSX 10.5.6

Спасибо,
Bastian

ответ

21

Вопрос заключается в том, что ваши тиражи буферизуются. непосредственно перед сном, вызовите fflush (stdout); для сброса буфера

+0

Это частая вещь. Я помог тоннам людей с версией C++ этой проблемы обнаружить cout.flush() или endl, также. – 2008-11-12 19:02:20

2

компилятор не может изменить порядок печати и сна, поскольку они являются «внешне наблюдаемым поведением» абстрактной машины C.

Что вы получаете из-за буферизации stdout. Вы можете использовать fflush или print для stderr, который не буферизируется.

0

Просто использование \ n или endl в конце первого printf должно быть достаточно

 Смежные вопросы

  • Нет связанных вопросов^_^