Enviando dados do TThread para o thread principal do VCL

Estou escrevendo algum software que fala com hardware externo através de uma DLL (movendo alguns motores e lendo alguns valores de volta). As chamadas para o dll estão bloqueando e não podem retornar para na ordem de 10 segundos. O software executa uma varredura movendo o hardware, fazendo uma leitura e repetindo por vários pontos. Uma varredura pode levar na ordem de 30 minutos para ser concluída. Enquanto a verificação está em execução, eu obviamente gostaria que a GUI fosse responsiva e um gráfico ao vivo (em uma Criança MDI) dos dados recebidos fosse atualizado em cada ponto. Multithreading parece a escolha óbvia para esse problema.

A minha pergunta é, qual é a melhor maneira de encadear isso e falar de volta para o thread VCL principal para atualizar o gráfico durante uma varredura?

Atualmente, tenho um único descendente TThread que executa a 'lógica de varredura' e uma matriz de duplas na seção pública var do ChildForm. Eu preciso preencher essa matriz do segmento, mas eu não sei se usar Synchronize ou CriticalSection ou PostMessage ou algum outro método. Cada vez que um novo valor é adicionado, o thread VCL principal precisa atualizar o gráfico. Devo realmente ter um objeto intermediário para os dados que é um var global e acessar isso do Thread e do ChildForm separadamente de alguma forma?

questionAnswers(4)

yourAnswerToTheQuestion