sleep () останавливает мою программу слишком рано. Что я делаю неправильно?

StackOverflow https://stackoverflow.com/questions/284962

  •  08-07-2019
  •  | 
  •  

Вопрос

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

  

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

и т. д.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top