setlocale関数を使用して、スレッドで有効にする方法は何ですか?

std::setlocale()関数を使用して、ロケールを設定すると、スレッド内で有効になります。以下はサンプルコードです:

#include <iostream>
#include <thread>
#include <locale>

void threadFunction()
{
    std::setlocale(LC_ALL, ""); // 设置locale
    std::cout.imbue(std::locale()); // 应用locale到输出流
    std::cout << "线程中的locale设置生效了!" << std::endl;
}

int main()
{
    std::thread t(threadFunction);
    t.join();
    
    std::cout << "主线程中的locale设置没有生效!" << std::endl;
    
    return 0;
}

この例のコードでは、threadFunction()関数が新しいスレッドで実行されています。この関数ではまずstd::setlocale(LC_ALL, “”)を呼び出してlocaleを設定し、次にstd::cout.imbue(std::locale())を使用してlocaleを出力ストリームに適用しています。これにより、スレッド内の出力は指定したlocaleに基づいて書式設定されます。

std::setlocale()関数はマルチスレッド環境で再入不可であり、競合条件を引き起こす可能性があります。したがって、マルチスレッドプログラムでstd::setlocale()を使用する際には注意が必要です。

bannerAds