Wysyłanie danych z TThread do głównego wątku VCL

Piszę oprogramowanie, które rozmawia z zewnętrznym sprzętem za pomocą biblioteki DLL (przenosząc niektóre silniki i odczytując niektóre wartości). Połączenia z biblioteką DLL są blokowane i mogą nie powrócić w ciągu 10 sekund. Oprogramowanie wykonuje skanowanie, przesuwając sprzęt, odczytując i powtarzając liczbę punktów. Jedno skanowanie może potrwać 30 minut. Gdy skanowanie jest uruchomione, oczywiście chciałbym, aby GUI był responsywny, a wykres na żywo (w MDI Child) aktualizował dane przychodzące w każdym punkcie. Wielowątkowość wydaje się oczywistym wyborem dla tego problemu.

Moje pytanie brzmi: jaki jest najlepszy sposób, aby to powiązać i wrócić do głównego wątku VCL, aby zaktualizować wykres podczas skanowania?

Obecnie mam pojedynczego potomka TThread, który wykonuje „logikę skanowania” i tablicę podwójnych w publicznej sekcji var ChildForm. Muszę wypełnić tę tablicę z wątku, ale nie wiem, czy użyć Synchronize lub CriticalSection lub PostMessage lub innej metody. Po każdym dodaniu nowej wartości główny wątek VCL musi zaktualizować wykres. Czy naprawdę powinienem mieć obiekt pośredni dla danych, który jest globalną odmianą i uzyskać do niego dostęp z wątku i osobno w postaci ChildForm?

questionAnswers(4)

yourAnswerToTheQuestion