System.Classes.TThread.Synchronize

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

procedure Synchronize(AMethod: TThreadMethod); overload; inline;
procedure Synchronize(AThreadProc: TThreadProcedure); overload; inline;
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.

Remarque: It is safe to call Synchronize from the main thread.
Remarque: Vous pouvez aussi protéger les méthodes non sécurisées en utilisant des sections critiques ou le synchronisateur en écriture exclusive multi-lecture.

Par exemple, vous pouvez utiliser la méthode Synchronize pour interagir avec un composant VCL ou FireMonkey. Utilisez une méthode anonyme in-situ pour résoudre le problème de transmission des variables à la méthode à synchroniser.

Delphi:

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

C++:

String timeStarted = DateTimeToStr(Now());
TThread::CreateAnonymousThread(
	  [timeStarted]() {
	   LengthyOperation(); // Some lengthy work done in worker thread
	   TThread::Synchronize(nullptr, _di_TThreadProcedure([timeStarted] {
		     ShowMessage(String("DONE: Job started @ ")+timeStarted);
	   }));
	  })->Start();

Voir aussi

Exemples de code