System.Classes.TThread.Synchronize
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.
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
- System.Classes.TThreadMethod
- System.Classes.TThread.Execute
- System.Classes.TThread.Queue
- System.Classes.TThread.OnTerminate
- System.SyncObjs.TCriticalSection
- System.SysUtils.TMultiReadExclusiveWriteSynchronizer
- System.Classes.CheckSynchronize
- Utilisation du thread VCL principal