THREADVAR |
Variable de processus léger |
---|---|
Delphi/Kylix/Lazarus |
Syntaxe
ThreadVar ident11,ident12,...:type1; ident21,ident22,...:type2; |
Paramètres
Nom | Description |
---|---|
ident11, ident12, ident21, ident22 | Ce paramètre permet d'indiquer une variable |
type1, type2 | Ce paramètre permet d'indiquer un type de variable |
Description
Ce mot réservé permet de définir des variables utilisés par des processus léger. Ainsi, le mot réservé ThreadVar commence une déclaration de variable de la même manière que le mot réservé var, sauf que ThreadVar ne peut être utilisé qu'au niveau de l'unité. Les variables déclarées à l'aide de ThreadVar ont des valeurs distinctes dans chaque processus léger. Les variables ordinaires, en revanche, sont partagées entre tous les processus léger (thread) d'un processus.
Remarques
- Si vous utilisez la classe TThread (unité Classes), il sera probablement plus pratique d'utiliser des champs pour entreposer des données par processus léger.
- Si vous écrivez un sous-programme ou une classe réutilisable pouvant être utilisé dans plusieurs processus léger, vous pouvez utiliser des variables threadvar pour suivre les informations par processus léger.
- Les déclarations ThreadVar s'appliquent uniquement à la variable ifself. Si la variable est un pointeur ou encapsule un pointeur (par exemple, objet, une chaîne de caractères longue, un tableau dynamique, une Variant), les données peuvent être accessibles à partir de plusieurs processus léger.
- Les variables ThreadVar utilisent l'entreposage TLS de Windows. Chaque accès aux variables nécessite un appel de fonction. Une autre raison d'utiliser la classe TThread est que l'accès aux champs de l'objet est plus rapide que l'utilisation de variables ThreadVar.
- Chaque module utilisant une variable ThreadVar nécessite un emplacement TLS, mais Windows ne dispose que d'un petit nombre d'emplacements TLS. Un grand projet doit utiliser des paquets pour garantir la disponibilité de cette ressource limitée.
- Chaque module (application, DLL, paquet) contenant une variable ThreadVar nécessite son propre emplacement TLS distinct. Si vous liez une DLL de manière statique, la DLL contient sa propre copie de l'unité System et ses variables IOResult et RaiseList (étant la variable ThreadVar). Un projet comportant un grand nombre de DLL peut manquer de logements TLS même s'il ne possède pas ses propres variables ThreadVar.
- Si vous utilisez des paquets, les paquets vc150 contiennent l'instance partagée de l'unité System et ses variables ThreadVar. Ceci signifie que le projet n'a besoin que d'un seul emplacement TLS, quel que soit le nombre de DLL et de paquets qu'il charge. Si une DLL ou un paquet requiert ses propres variables ThreadVar, seul ce module aura besoin d'un autre emplacement TLS.
- N'utilisez pas de variables ThreadVar dans la section finalization d'une unité susceptible d'être utilisée dans une DLL. Delphi libère la mémoire TLS lors du déchargement de la DLL, mais avant d'appeler les sections finalization.
Voir également
Langage de programmation - Delphi/Kylix/Lazarus - Référence de procédures et fonctions - BeginThread
Langage de programmation - Delphi/Kylix/Lazarus - Référence de procédures et fonctions - EndThread
Langage de programmation - Delphi/Kylix/Lazarus - Référence des variables - IsMultiThread