Несколько вариантов решения проблемы:
1. Синхронизировать только моменты работы с VCL. Данные можно передавать, например, так
PHP код:
type
TMyThread = class(TThread)
private
FStrToAdd: String;
procedure AddToForm(s: String);
procedure AddToFormSynchro();
//.......
procedure TMyThread.AddToForm(s: String);
begin
FStrToAdd := s;
Synchronize(AddToFormSynchro);
end;
procedure TMyThread.AddToFormSynchro;
begin
FMyForm.Memo.Add(FStrToAdd);
end;
2. Использовать для передачи данных форме PostMessage. ( нить не тормозится, главное не завалить форму сообщениями )
3. Создать буферный объект ассинхронной передачи.
- на основе дополнительной нити ( синхронизируем только передачу ему данных, например через критическую секцию и выставляем ему событие, а он уже ждет основную нить )
- через объект синхронизации ( синхронизируется только запись чтение из него данных , например через критическую секцию и форме посылается сообщение, что есть новости PostMessage, которые ана сама заберет )