Delay function?

Denis Koroskin 2korden at gmail.com
Tue Sep 2 13:41:03 PDT 2008


On Wed, 03 Sep 2008 00:24:02 +0400, Brendan <brenzie at gmail.com> wrote:

> Jarrett Billingsley Wrote:
>
>> On Tue, Sep 2, 2008 at 1:37 PM, Chris R. Miller <
>> lordSaurontheGreat at gmail.com> wrote:
>>
>> > Brendan wrote:
>> > > Jarrett Billingsley Wrote:
>> > >
>> > >
>> > >> </blockquote></div><br>If you're expecting it to pause after each
>> > character.. you're missing braces around the body of the for loop,  
>> this
>> > isn't Python ;)<br></div>
>> > >>
>> > >
>> > > Oooooh, what a foolish mistake! How could I forget that? Thanks for
>> > pointing it out.
>> > >
>> > > But the result isn't fruitful, though. When I run it, all I get is  
>> an
>> > empty screen, then after many seconds the whole string is displayed  
>> at once
>> > (not to mention I set the sleep time to 0.1 seconds). I'm probably  
>> missing
>> > something. Any idea?
>> >
>> > Flush the output?
>> >
>> >
>> Totally.
>>
>> foreach(ch; s) { write(ch); fflush(stdout); system("pause 0.2"); }
>
> Thanks! With a little quick tweaking it worked. But, even though I see  
> the effective result, I don't entirely understand what it means "to  
> flush" the output. I've never heard of this concept before and Google  
> doesn't seem to return any useful answers. Could you explain?

Google for "buffering". When you print something, it doesn't get displayed  
immediately. Instead, the string is copied to some internal buffer and  
when it gets full (or close to full) it is then flushed, i.e. its contents  
copied to the console and buffer size reset. Something like this:

char[] buffer;

void writefln(char[] str)
{
   buffer ~= str;
   if (buffer.length > 1024) {
     doTheRealPrinting(buffer);
     buffer.length = 0;
   }
}


More information about the Digitalmars-d-learn mailing list