System.Classes.TThread.Synchronize

De Appmethod Libraries
Aller à : navigation, rechercher

Object Pascal

procedure Synchronize(AMethod: TThreadMethod); overload;
procedure Synchronize(AThreadProc: TThreadProcedure); overload;
class procedure Synchronize(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Synchronize(const AThread: TThread; AThreadProc: TThreadProcedure); overload; static;

C++

void __fastcall Synchronize(TThreadMethod AMethod)/* overload */;
void __fastcall Synchronize(_di_TThreadProcedure AThreadProc)/* overload */;
static void __fastcall Synchronize(TThread* const AThread, TThreadMethod AMethod)/* overload */;
static void __fastcall Synchronize(TThread* const AThread, _di_TThreadProcedure AThreadProc)/* overload */;

Propriétés

Type Visibilité  Source Unité  Parent
procedure
function
public
System.Classes.pas
System.Classes.hpp
System.Classes TThread

Description

Exécute un appel de méthode dans le thread principal.

Synchronize provoque l'exécution de l'appel spécifié par AMethod en utilisant le thread principal, ce qui évite les conflits multithread. Le paramètre AThread associe le thread de l'appelant.

Pour les méthodes statiques, vous pouvez associer AMethod à n'importe quel thread en utilisant le paramètre AThread. De plus, vous pouvez utiliser nil/NULL en tant que paramètre AThread si vous n'avez pas besoin de savoir les informations du thread de l'appelant dans le thread principal.

Dans l'implémentation en cours, la méthode Synchronize peut utiliser les informations des threads associés pour réveiller le thread principal sur les plates-formes Windows.

Si vous n'êtes pas sûr qu'un appel de méthode soit adapté à l'utilisation de threads, effectuez l'appel depuis la méthode Synchronize pour garantir son exécution dans le thread principal.

L'exécution du thread en cours est interrompue tant que la méthode s'exécute dans le thread principal.

Avertissement : N'appelez pas Synchronize à partir du thread principal. Cela peut conduire à une boucle infinie.

Remarque : Vous pouvez aussi protéger les méthodes non sécurisées en utilisant des sections critiques ou le synchroniseur en écriture exclusive multilecture.

Un exemple d'une situation où vous pouvez utiliser Synchronize est lorsque vous voulez interagir avec un composant VCL ou FireMonkey. Utilisez une méthode anonyme in-situ pour résoudre le problème de la transmission des variables à la méthode que vous voulez synchroniser :

Synchronize(
  procedure
  begin
    Form1.Memo1.Lines.Add(Begin Execution);
  end);

Voir aussi

Exemples de code