Показать сообщение отдельно
  #7  
Старый 31.12.2009, 11:42
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Несколько вариантов решения проблемы:

1. Синхронизировать только моменты работы с VCL. Данные можно передавать, например, так
PHP код:
type
  TMyThread 
= class(TThread)
  private
    
FStrToAddString;
    
procedure AddToForm(sString);
    
procedure AddToFormSynchro();
 
//.......
procedure TMyThread.AddToForm(sString);
begin
  FStrToAdd 
:= s;
  
Synchronize(AddToFormSynchro);
end;

procedure TMyThread.AddToFormSynchro;
begin
  FMyForm
.Memo.Add(FStrToAdd);
end
2. Использовать для передачи данных форме PostMessage. ( нить не тормозится, главное не завалить форму сообщениями )
3. Создать буферный объект ассинхронной передачи.
- на основе дополнительной нити ( синхронизируем только передачу ему данных, например через критическую секцию и выставляем ему событие, а он уже ждет основную нить )
- через объект синхронизации ( синхронизируется только запись чтение из него данных , например через критическую секцию и форме посылается сообщение, что есть новости PostMessage, которые ана сама заберет )
Ответить с цитированием