sleep () останавливает мою программу слишком рано. Что я делаю неправильно? - PullRequest
4 голосов
/ 12 ноября 2008

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

тестирование процессора ... выполнено
тестирование ОЗУ ... сделано

и т. Д.

Я написал следующую программу на 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.

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

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

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

Спасибо,
Бастиан

Ответы [ 3 ]

21 голосов
/ 12 ноября 2008

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

2 голосов
/ 13 ноября 2008

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

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

0 голосов
/ 07 мая 2009

Достаточно просто использовать \ n или endl в конце первого printf

...