Exemplos de código do livro de padrões de segurança de threads delphi
https://dalija.prasnikar.info/delphitspatt/
https://dalija.prasnikar.info
Parte 2. A biblioteca de tempo de execução principal
Capítulo 5. Registro de controle de ponto flutuante
- BrokenMath.dpr
- Brownmath.dproj
- Safemath.dpr
- Safemath.dproj
Capítulo 7.1. Parâmetros
- Parâmetros.dpr
- Parâmetros.dproj
- ParametersMainf.pas
- ParametersMainf.dfm
Capítulo 8. Campos de classe, singletons e instâncias padrão
- Singletons.dpr
- Singletons.dProj
- Singletonsmainf.pas
- Singletonsmainf.dfm
- SingleToCllasses.pas
- Singletonlocal.pas
- SingleTonClassProp.pas
- Singletonlazy.pas
Capítulo 12. Coleções
- Coletionstest.dpr
- Coletorstest.dproj
- ColeçõesMainf.pas
- ColeçõesMainf.dfm
Capítulo 13. Processamento de coleta paralela
Parte 3. Estruturas principais
Capítulo 16. Serialização
- Serialização.dpr
- Serialização.dproj
- SerializationMainf.pas
- SerializationMainf.dfm
Capítulo 17. System.net
- NetClient.dpr
- NetClient.dproj
- NetClientMainf.pas
- NetClientMainf.dfm
Capítulo 19. Indy
- Indy.dpr
- Indy.dproj
- Indymainf.pas
- Indymainf.dfm
Capítulo 20. Rest
- Restdemo.dpr
- Restdemo.dproj
- Restmainf.pas
- RestMainf.dfm
Capítulo 21. Expressões regulares
Parte 5. Processamento de gráficos e imagem
Capítulo 27. Consumo de Recursos
- Resources.dpr
- Resources.dProj
- ResourcesMainf.pas
- ResourcesMainf.dfm
Capítulo 30. Exemplo de gráficos VCL
- Imagens.dpr
- Imagens.dproj
- ImagesMainf.pas
- ImagesMainf.dfm
Parte 6. Estruturas personalizadas
Capítulo 33. Logging
- Nx.log.pas
- Logging.dpr
- Logging.dproj
Capítulo 34. Tokens de cancelamento
- Nx.tokens.pas
- Tokens.dpr
- Tokens.dproj
- Tokensmainf.pas
- Tokensmainf.dfm
Capítulo 35. Bus de evento
- Nx.horizon.pas
- Horizon.dpr
- Horizon.dproj
- Horizonmainf.pas
- Horizonmainf.dfm
Capítulo 36. Medição do desempenho
- Nx.chronos.pas
- Zerothread.dpr
- Zerothread.dproj
NOTA: O objetivo dos exemplos apresentados é mostrar o código e os problemas que podem surgir nesse código ou mostrar padrões gerais de codificação para alcançar o código seguro de encadeamento enquanto vários threads estão em execução. Como tal, muitos deles não implementam a limpeza adequada no desligamento do aplicativo e, se você fechar o aplicativo antes de iniciar as tarefas ou threads em segundo plano concluírem seu trabalho, o aplicativo poderá travar.
Para executar o desligamento limpo, você precisa aguardar a conclusão de tarefas ou thread ou usar algum outro mecanismo que impeça o acesso à GUI ou outros dados compartilhados durante o desligamento do aplicativo.
Você pode encontrar exemplos sobre como desligar o aplicativo em https://github.com/dalijap/code-delphi-async Capítulo 35.2 Limpeza na GUI Destruction