Показать сообщение отдельно
  #10  
Старый 16.04.2018, 15:55
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Если хотите работать с объектом потока и менять его параметры или вызывать некую процедуру, можно либо создать в потоке очередь сообщений и из главного потока слать PostThreadMessage (как я уже писал), или сделать тоже самое на событиях.
Код:
type
  TThr = class (TThread)
  private
    FLock: TCriticalSection;
    FFiled: SomeType;
    FSetEvent: TEvent;
    function GetField: SomeType;
    procedure SetField(Value: SomeType);
  public
    property Field: SomeType read GetField write SetField;
  end;

function GetField: SomeType;
begin
  FLock.Enter;
  try
    Result := FField;
  finally
    FLock.Leave;
  end;
end;

procedure SetField(Value: SomeType);
begin
  FLock.Enter;
  try
    FField := Value;
  finally
    FLock.Leave;
  end;
  FSetEvent.SetEvent;
end;

procedure Ececute();
begin
  Handles[N] := FSetEvent.Handle;
  case WaitForMultiplyObjects(...) of
  Wait_Object_0 + N: {сработало событие изменения поля};
  end;
end;
Написал на коленке, могут быть ошибки. Если надо, где-то есть примерчик на сообщениях.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием