Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sleep() is stalling my program too early. What am I doing wrong?

I want to write a small program that should print something like

testing CPU... done
testing RAM... done

and so on.

I wrote the following program in 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" );

where sleep_time is 2.

However, instead of printing "testing CPU..." first, then waiting, then printing "done", it first waits, then prints the whole line, which is not exactly what I had in mind.

I suppose this has something to do with automatic optimization by the compiler.
Anyway, what can I do to get the desired output?

I am using XCode 3.1 on OSX 10.5.6

Thank you,
Bastian

like image 330
bastibe Avatar asked Nov 28 '22 21:11

bastibe


2 Answers

The issue is that your printings are buffered. immediately before sleeping, call fflush(stdout); to flush the buffer

like image 68
Johannes Schaub - litb Avatar answered Dec 15 '22 07:12

Johannes Schaub - litb


compiler can not reorder prints and sleeps, for they are "externally observable behavior" of the C abstract machine.

What you get is due to stdout buffering. You can use fflush or print to stderr, which is not buffered.

like image 31
n-alexander Avatar answered Dec 15 '22 07:12

n-alexander