The SDL forums have moved to discourse.libsdl.org.
This is just a read-only archive of the previous forums, to keep old links working.


SDL Forum Index
SDL
Simple Directmedia Layer Forums
race condition (sort of)? message box verus function return
speartip


Joined: 06 Feb 2017
Posts: 28
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
race condition (sort of)? message box verus function return
Evan Ramos
Guest

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
_______________________________________________
SDL mailing list

http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
worked great thx
speartip


Joined: 06 Feb 2017
Posts: 28
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?
race condition (sort of)? message box verus function return
Jonny D


Joined: 12 Sep 2009
Posts: 932
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 D




On Mon, Feb 13, 2017 at 12:24 PM, speartip wrote:
Quote:
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

http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

speartip


Joined: 06 Feb 2017
Posts: 28
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.
race condition (sort of)? message box verus function return
Rainer Deyke
Guest

On 13.02.2017 18:24, speartip wrote:
Quote:
std::cout<< horizontal <<"\t"<<std::flush<< vertical << "\t"<<std::flush<<endl;

'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.


--
Rainer Deyke -

_______________________________________________
SDL mailing list

http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
speartip


Joined: 06 Feb 2017
Posts: 28
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?
race condition (sort of)? message box verus function return
Jonny D


Joined: 12 Sep 2009
Posts: 932
For optimizing speed, do not print anything at all. Smile

Jonny D




On Wed, Feb 15, 2017 at 10:00 AM, speartip wrote:
Quote:



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

http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

speartip


Joined: 06 Feb 2017
Posts: 28
Idea