Windows每线程区域设置会丢弃经典区域设置?

时间:2013-07-19 16:34:24

标签: c++ windows visual-studio-2012 thread-safety locale

由于我不明白的原因,当我要求Windows在每个线程的基础上存储区域设置信息时,我的单线程程序正在失去对经典(或“C”)区域设置的跟踪。这是我的源代码:

#include <string>
#include <sstream>

void print_pt_5()
{
    const int precision = 6;
    std::ostringstream oss;
    oss.imbue(std::locale::classic());
    //oss.imbue(std::locale("C"));
    oss.setf(std::ios::floatfield, std::ios::fixed);
    oss.precision(precision);
    oss << 0.5;
    printf("%s\n", oss.str().c_str());
}

int main(int argc, char* argv[])
{
    print_pt_5();
    // locale settings are thread-local
    _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); 
    // set to german locale
    setlocale(LC_ALL, "German_Austria.850");                
    print_pt_5();
    return 0;
}

当我这样运行时,输出为:

0.500000
0,500000

如果删除_configthreadlocale行,则输出为:

0.500000
0.500000

我正在使用VS2012构建并在Windows 8上运行。为什么我在第一个示例中得到小数点的逗号?

0 个答案:

没有答案