System.Classes.TThread.Synchronize

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

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 appelant.

Pour les méthodes statiques, vous pouvez associer AMethod avec tout thread en utilisant les paramètre AThread. Vous pouvez aussi utiliser nil/NULL en tant que paramètre AThread si vous n'avez pas besoin de connaître les informations sur le thread appelant dans le thread principal.

Dans l'implémentation en cours, la méthode Synchronize peut utiliser des informations de thread afin de 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 depuis le thread principal. Cela peut provoquer 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 multi-lecture.

Par exemple, vous pourriez vouloir utiliser Synchronize lorsque vous voulez intéragir avec un composant soit VCL soit FireMonkey. Utilisez à la place une méthode anonyme pour résoudre le problème de la transmission de variables à la méthode que vous souhaitez synchroniser :

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

Voir aussi

Exemples de code