Freigeben über


_configthreadlocale

Konfiguriert threadspezifische Gebietsschemaoptionen.

int _configthreadlocale( int type );

Parameter

  • type
    Die festzulegende Option.Eine der Optionen in der folgenden Tabelle aufgeführten.

Rückgabewert

Der vorherige threadspezifische Gebietsschemastatus (_DISABLE_PER_THREAD_LOCALE oder _ENABLE_PER_THREAD_LOCALE) oder -1 auf Fehler.

Hinweise

Die _configurethreadlocale-Funktion wird verwendet, um die Verwendung von Threadbesonderegebietsschemas zu steuern.Verwenden Sie eine dieser Optionen, den threadspezifischen Gebietsschemastatus anzugeben oder zu bestimmen:

  • _ENABLE_PER_THREAD_LOCALE
    Lassen Sie den aktuellen Thread ein Threadbesonderegebietsschema verwenden.Nachfolgende Aufrufe von setlocale in diesem Thread betreffen nur das eigene Gebietsschema des Threads.

  • _DISABLE_PER_THREAD_LOCALE
    Lassen Sie den aktuellen Thread das globale Gebietsschema verwenden.Nachfolgende Aufrufe von setlocale in diesem Thread beeinflussen andere Threads mithilfe des globalen Gebietsschemas.

  • 0
    Ruft die aktuelle Einstellung für diesen bestimmten Thread ab.

Diese Funktionen beeinflussen das Verhalten von setlocale, von _tsetlocale, von _wsetlocale, von _beginthread und von _beginthreadex.Wenn eine andere Methode verwendet wird, um Threads zu erstellen, haben die Gebietsschemaeinstellungen keine Auswirkungen auf diese Threads.

Wenn threadspezifisches Gebietsschema deaktiviert wird, wird jeder nachfolgende Aufruf von setlocale oder zu _wsetlocale das Gebietsschema aller Threads.Wenn threadspezifisches Gebietsschema aktiviert ist, wirkt sich setlocale oder _wsetlocale nur das aktuelle Gebietsschema des Threads.

Wenn Sie _configurethreadlocale verwenden, um ein threadspezifisches Gebietsschema zu aktivieren, wird empfohlen, setlocale oder _wsetlocale aufrufen, um das bevorzugte Gebietsschema in diesem Thread unmittelbar danach festzulegen.

Wenn type keiner der Werte handelt, die in der Tabelle aufgeführten, Aufrufe dieser Funktion der ungültige Parameterhandler, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, Sätze errno dieser Funktion zu EINVAL und Rückgabe von -1.

Anforderungen

Routine

Erforderlicher Header

_configthreadlocale

<locale.h>

Beispiel

// crt_configthreadlocale.cpp
// 
// This program demonstrates the use of _configthreadlocale when
// using is two independent threads.
//

#include <locale.h>
#include <process.h>
#include <windows.h>
#include <stdio.h>
#include <time.h>

#define BUFF_SIZE 100

// Retrieve the date and time in the current
// locale's format.
int get_time(unsigned char* str)
{
    __time64_t  ltime;
    struct tm   thetime;

    // Retieve the time
    _time64(&ltime);
    _gmtime64_s(&thetime, &ltime);

    // Format the current time structure into a string
    // using %#x is the long date representation,
    // appropriate to the current locale
    if (!strftime((char *)str, BUFF_SIZE, "%#x", 
                  (const struct tm*)&thetime))
    {
        printf("strftime failed!\n");
        return -1;
    }
    return 0;
}

// This thread sets its locale to German
// and prints the time.
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
    unsigned char str[BUFF_SIZE];

    // Set the thread code page
    _setmbcp(_MB_CP_ANSI)

    // Set the thread locale
    printf("The thread locale is now set to %s.\n",
           setlocale(LC_ALL, "German"));

    // Retrieve the time string from the helper function
    if (get_time(str) == 0)
    {
        printf("The time in German locale is: '%s'\n", str);
    }

    _endthreadex( 0 );
    return 0;
} 

// The main thread spawns a second thread (above) and then
// sets the locale to English and prints the time.
int main()
{ 
    HANDLE          hThread;
    unsigned        threadID;
    unsigned char   str[BUFF_SIZE];

    // Configure per-thread locale to cause all subsequently created 
    // threads to have their own locale.
    _configthreadlocale(_ENABLE_PER_THREAD_LOCALE);

    // Retrieve the time string from the helper function
    printf("The thread locale is now set to %s.\n",
           setlocale(LC_ALL, "English"));

    // Create the second thread.
    hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc,
                                      NULL, 0, &threadID );

    if (get_time(str) == 0)
    {
        // Retrieve the time string from the helper function
        printf("The time in English locale is: '%s'\n\n", str);
    }

    // Wait for the created thread to finish.
    WaitForSingleObject( hThread, INFINITE );

    // Destroy the thread object.
    CloseHandle( hThread );
}
  
  
  
  

.NET Framework-Entsprechung

Nicht zutreffend. jedoch finden Sie unter Verwenden der CurrentCulture-Eigenschaft.

Siehe auch

Referenz

setlocale, _wsetlocale

_beginthread-Funktion, _beginthreadex

Gebietsschema

Multithreading und Gebietsschemas