Set C++ global locale too in wxAppTraitsBase::SetLocale().

Ensure that C++ locale matches the C one, otherwise operations on C++ streams
may get much slower because some implementations (notable MinGW-64) change and
reset the C locale on every function call in this case.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72719 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-10-22 15:51:49 +00:00
parent 988f7eec77
commit fe24e4e9c2

View File

@@ -47,10 +47,15 @@
#include "wx/tokenzr.h" #include "wx/tokenzr.h"
#include "wx/thread.h" #include "wx/thread.h"
#if wxUSE_EXCEPTIONS && wxUSE_STL #if wxUSE_STL
#include <exception> #if wxUSE_EXCEPTIONS
#include <typeinfo> #include <exception>
#endif #include <typeinfo>
#endif
#if wxUSE_INTL
#include <locale>
#endif
#endif // wxUSE_STL
#if !defined(__WINDOWS__) || defined(__WXMICROWIN__) #if !defined(__WINDOWS__) || defined(__WXMICROWIN__)
#include <signal.h> // for SIGTRAP used by wxTrap() #include <signal.h> // for SIGTRAP used by wxTrap()
@@ -834,7 +839,19 @@ bool wxConsoleAppTraitsBase::HasStderr()
#if wxUSE_INTL #if wxUSE_INTL
void wxAppTraitsBase::SetLocale() void wxAppTraitsBase::SetLocale()
{ {
// We want to use the user locale by default in GUI applications in order
// to show the numbers, dates &c in the familiar format -- and also accept
// this format on input (especially important for decimal comma/dot).
wxSetlocale(LC_ALL, ""); wxSetlocale(LC_ALL, "");
#if wxUSE_STL
// At least in some environments, e.g. MinGW-64, if the global C++ locale
// is different from the global C locale, all stream operations temporarily
// change the locale resulting in a huge slowdown (3 times slower in some
// real-life applications), so change the C++ locale to match.
std::locale::global(std::locale(""));
#endif //wxUSE_STL
wxUpdateLocaleIsUtf8(); wxUpdateLocaleIsUtf8();
} }
#endif #endif