一键导入
delphi-multithreading-async
Programação assíncrona, multithreading, uso de TTask, IFuture, TThread, sincronização de threads e thread-safety em Delphi.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Programação assíncrona, multithreading, uso de TTask, IFuture, TThread, sincronização de threads e thread-safety em Delphi.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | delphi-multithreading-async |
| description | Programação assíncrona, multithreading, uso de TTask, IFuture, TThread, sincronização de threads e thread-safety em Delphi. |
Esta guia estabelece as diretrizes para desenvolvimento assíncrono e paralelo de alta performance, livre de race conditions, deadlocks e congelamento de tela.
NUNCA acesse componentes visuais (VCL/FMX) diretamente de uma thread secundária. Qualquer interação com a UI deve ser despachada para a Main Thread através de
TThread.Queue(não-bloqueante, recomendado) ouTThread.Synchronize(bloqueante).
TThread.CreateAnonymousThread(
procedure
begin
// Trabalho pesado em background...
Sleep(2000);
// Atualização da UI segura
TThread.Queue(nil,
procedure
begin
lblStatus.Caption := 'Processamento concluído!';
end);
end).Start;
Dê preferência ao uso da PPL (System.Threading) em vez de gerenciar threads brutas manualmente.
var LTask: ITask;
begin
LTask := TTask.Run(
procedure
begin
// Executado no ThreadPool
end);
end;
LFuture.Value bloqueará a execução se o cálculo ainda não tiver finalizado.
var LFuture: IFuture<Integer>;
begin
LFuture := TFuture<Integer>.Create(
function: Integer
begin
Result := ExecutarCalculoPesado;
end);
LFuture.Start;
// ... faz outras operações simultâneas
ProcessarResultado(LFuture.Value);
end;
[!WARNING] Certifique-se de que cada iteração do
TParallel.Forseja independente e que o acesso a recursos compartilhados seja feito de forma thread-safe (usando locks).
Sempre que duas ou mais threads compartilharem dados (listas, objetos ou contadores), utilize primitivas de sincronização:
TInterlocked.Increment(FProcessedCount);
FLock.Enter;
try
FSharedList.Add(LItem);
finally
FLock.Leave; // SEMPRE no finally para evitar deadlocks
end;
LockList e UnlockList.[!CRITICAL] Nunca compartilhe a mesma instância de TFDConnection (FireDAC) ou conexões dbExpress/ADO entre threads. Cada thread secundária deve abrir sua própria conexão física ao banco de dados e destruí-la ao final da rotina de execução da thread.
TTask.Run(
procedure
var
LConnection: TFDConnection;
LQuery: TFDQuery;
begin
LConnection := TFDConnection.Create(nil);
LQuery := TFDQuery.Create(nil);
try
LConnection.ConnectionDefName := 'MeuDef';
LQuery.Connection := LConnection;
LQuery.Open('SELECT * FROM TABELA');
// processamento...
finally
LQuery.Free;
LConnection.Free;
end;
end);
Diretrizes de SOLID, Clean Code e padrões de nomenclatura para classes, interfaces, métodos e variáveis em projetos Delphi.
Desenvolvimento de microserviços e APIs REST com o framework minimalista Horse em Delphi. Rotas, controllers, middlewares, gerenciamento de memória e tratamento de parâmetros.
Diretrizes de qualidade e desenvolvimento de templates HTML e páginas dinâmicas com Web Stencils (Server-Side Rendering) no Delphi.
Diretrizes e mapeamentos de expressões regulares para migração de componentes Borland Database Engine (BDE) para FireDAC no Delphi.
Diretrizes e mapeamentos de expressões regulares para migração de componentes dbExpress (DBX) para FireDAC no Delphi.
Diretrizes de qualidade e desenvolvimento de APIs web, ORM, injeção de dependências e testes utilizando o Dext Framework em Delphi.