Отправка данных из TThread в основной поток VCL

Я пишу некоторое программное обеспечение, которое общается с внешним оборудованием через DLL (перемещая некоторые двигатели и читая некоторые значения обратно). Звонки в dll блокируются и могут не возвращаться в течение порядка 10 секунд. Программное обеспечение выполняет сканирование путем перемещения оборудования, считывания и повторения для ряда точек. Одно сканирование может занять порядка 30 минут. В то время как сканирование выполняется, я бы хотел, чтобы графический интерфейс реагировал и действующий график (в MDI-потомке) входящих данных обновлялся в каждой точке. Многопоточность кажется очевидным выбором для этой проблемы.

Мой вопрос заключается в том, как лучше всего проделать это и поговорить с основным потоком VCL, чтобы обновить график во время сканирования?

В настоящее время у меня есть один потомок TThread, который выполняет 'логику сканирования', и массив значений типа double в публичном разделе var в ChildForm. Мне нужно заполнить этот массив из потока, но я не знаю, использовать ли Synchronize или CriticalSection или PostMessage или какой-либо другой метод. Каждый раз, когда добавляется новое значение, основной поток VCL должен обновлять график. Должен ли я действительно иметь промежуточный объект для данных, которые являются глобальными переменными, и как-то обращаться к ним из Thread и ChildForm отдельно?

Ответы на вопрос(4)

Ваш ответ на вопрос