Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Configure les options de paramètres régionaux par thread.
Syntaxe
int _configthreadlocale( int per_thread_locale_type );
Paramètres
per_thread_locale_type
Option à définir. Une des options répertoriées dans le tableau suivant.
Valeur retournée
L’état des paramètres régionaux par thread précédent (_DISABLE_PER_THREAD_LOCALE ou _ENABLE_PER_THREAD_LOCALE), ou -1 en cas d’échec.
Notes
La fonction _configthreadlocale est utilisée pour contrôler l’utilisation des paramètres régionaux spécifiques aux threads. Utilisez l’une de ces per_thread_locale_type options pour spécifier ou déterminer l’état des paramètres régionaux par thread :
| Option | Description |
|---|---|
_ENABLE_PER_THREAD_LOCALE |
Faites en sorte que le thread actuel utilise des paramètres régionaux spécifiques aux threads. Les appels suivants à setlocale dans ce thread affectent uniquement les paramètres régionaux de ce thread. |
_DISABLE_PER_THREAD_LOCALE |
Faites en sorte que le thread actuel utilise les paramètres régionaux globaux. Les appels suivants à setlocale dans ce thread affectent les autres threads utilisant les paramètres régionaux globaux. |
| 0 | Récupère le paramétrage actuel de ce thread particulier. |
Ces fonctions affectent le comportement de setlocale, , _wsetlocale_tsetlocale, et _setmbcp. Lorsque les paramètres régionaux par thread sont désactivés, tout appel ultérieur vers setlocale ou _wsetlocale modifie les paramètres régionaux de tous les threads qui utilisent les paramètres régionaux globaux. Quand les paramètres régionaux par thread sont activés, setlocale ou _wsetlocale affecte uniquement les paramètres régionaux du thread actuel.
Si vous utilisez _configthreadlocale pour activer des paramètres régionaux par thread, définissez les paramètres régionaux préférés dans ce thread immédiatement après un appel à setlocale ou _wsetlocale.
Si per_thread_locale_type ce n’est pas l’une des valeurs répertoriées dans la table, cette fonction appelle le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, cette fonction affecte à errno la valeur EINVAL et retourne -1.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
| Routine | En-tête requis |
|---|---|
_configthreadlocale |
'<locale.h>' |
Exemple
// crt_configthreadlocale.cpp
//
// This program demonstrates the use of _configthreadlocale when
// using two independent threads.
//
// Compile by using: cl /EHsc /W4 crt_configthreadlocale.cpp
#include <locale.h>
#include <mbctype.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(<ime);
_gmtime64_s(&thetime, <ime);
// 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];
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
// 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];
// Enable per-thread locale causes all subsequent locale
// setting changes in this thread to only affect this thread.
_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 );
}
The thread locale is now set to English_United States.1252.
The time in English locale is: 'Wednesday, May 12, 2004'
The thread locale is now set to German_Germany.1252.
The time in German locale is: 'Mittwoch, 12. Mai 2004'
Voir aussi
setlocale, _wsetlocale
_beginthread, _beginthreadex
Paramètres régionaux
Multithreading et paramètres régionaux