sleep () останавливает мою программу слишком рано. Что я делаю неправильно?
Вопрос
Я хочу написать небольшую программу, которая должна напечатать что-то вроде
тестирование процессора ... выполнено
тестирование ОЗУ ... выполнено
и т. д.
Я написал следующую программу на 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
Спасибо,
Бастиан
Решение
Проблема в том, что ваши печати буферизируются. непосредственно перед сном вызовите fflush (stdout); очистить буфер
Другие советы
не может переупорядочивать отпечатки и спящие, поскольку они являются "внешне наблюдаемым поведением". абстрактной машины C.
То, что вы получаете, связано с буферизацией стандартного вывода. Вы можете использовать fflush или print to stderr, который не буферизируется.
Достаточно просто использовать \ n или endl в конце первого printf