Race condition (sort of)? message box verus function return

Hi, my message box is appearing before function return before it…

Code:

cout<<“Call_SDL_GetCurrentDisplayMode”<<endl;
call_getCurrentDisplayMode(horizontal, vertical, &dm);
cout<< horizontal << “\t”<< vertical << ‘\n’;

MessageBox(0,"ScreenTest", "Ready?", MB_OK);

Well screentest pops up, and when I press “Ok”, the horizontal and vertical are then printed. I can live with it – jut wanted to know whether this is a permanent condition or whether there wa a workaround.

Thx

Try replacing the ‘\n’ with std::endl, or inserting std::flush after the ‘\n’.

-H-----
“After you finish the first 90% of a project, you have to finish the
other 90%.” - Michael Abrash

Hi,

Thank you for the solutions, they all worked. Of all the combinations I tried, the one below worked the best:

Code:

std::cout<< horizontal <<"\t"<<std::flush<< vertical << “\t”<<std::flush<<endl;

Generally speaking, why did flushing the stream and combinations, etc., work to speed up the routine?

It doesn’t speed anything up. There’s also no race condition, because
these commands are all done on a single thread.

Output streams write to a memory buffer. That memory buffer needs to be
flushed so that it is actually sent to the output device (which could be
anything, not just a simple terminal). C and C++ separate writing and
flushing to give you more control. If you don’t care about that control,
just use std::endl to write a newline and force a flush.

Jonny DOn Mon, Feb 13, 2017 at 12:24 PM, speartip wrote:

Hi,

Thank you for the solutions, they all worked. Of all the combinations I
tried, the one below worked the best:

Code:

std::cout<< horizontal <<"\t"<

Generally speaking, why did flushing the stream and combinations, etc.,
work to speed up the routine?


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Hi, points well taken thanks.

What I meant by sped up was that now my cout information was arriving before by message box where it had not before.

‘std::cout << std::endl’ is equivalent to ‘std::cout << ‘\n’ <<
std::flush’, so you’re flushing three times here. That’s a bad idea
because flushing slows down the program. I recommend this:

std::cout << horizontal << “\t” << vertical << “\t\n” << std::flush;

Flush exactly once, at the very end of your output, and always use
’std::flush’ instead of ‘std::endl’ because 'std::flush is more explicit
about your intention.On 13.02.2017 18:24, speartip wrote:

std::cout<< horizontal <<"\t"<<std::flush<< vertical << “\t”<<std::flush<<endl;


Rainer Deyke - rainerd at eldwood.com

Flush exactly once, at the very end of your output, and always use
’std::flush’ instead of ‘std::endl’ because 'std::flush is more explicit
about your intention.

Yes, following that advice, that’s true. Makes more sense when I look at the changes.

That’s a bad idea
because flushing slows down the program.

So what’s the best balance in a speed optimized routine?

For optimizing speed, do not print anything at all. :slight_smile:

Jonny DOn Wed, Feb 15, 2017 at 10:00 AM, speartip wrote:

Quote:

Flush exactly once, at the very end of your output, and always use
’std::flush’ instead of ‘std::endl’ because 'std::flush is more explicit
about your intention.

Yes, following that advice, that’s true. Makes more sense when I look at
the changes.

Quote:

That’s a bad idea
because flushing slows down the program.

So what’s the best balance in a speed optimized routine?


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

[Idea]