Показать сообщение отдельно
  #12  
Старый 19.04.2018, 09:27
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Попытался я реализовать вашу идею и что не получается. не подскажите в чем косяк?
Код:
while not Terminated do
  begin
    case WaitForMultipleObjects(3, @FHandles[0]{or @FHandles}, False , INFINITE) of
      WAIT_FAILED:
        RaiseLastOsError;
      WAIT_OBJECT_0:
        Terminate;
      WAIT_OBJECT_0 + 1:
        begin
        //some work 
        end;
      WAIT_OBJECT_0 + 2:
        begin
          AddLogEvent;// сюда мы не попадаем.
        end;
    end;
  end;

end;
Код:
thr= class(TThread)
  private
    FHandles: array[0..2] of THandle;
    FLock: TCriticalSection;
  
    fLogEvent: string;
    ...
    function GetLogEvent: string;
    procedure SetLogEvent(const Value: string);
    ...
  protected
  ...
    procedure AddLogEvent;
  public
...
  published

   ...
    property LogEvent: string read GetLogEvent write SetLogEvent;
   ...
  end;
Код:
procedure Thr.SetLogEvent(const Value: string);
begin
  FLock.Enter;
  try
    if Value <> fLogEvent then
    begin
      fLogEvent := Value;
      SetEvent(FHandles[2])
    end;

  finally
  Flock.leave;
  end;

Код:
constructor Thr.Create(...);
begin

  inherited Create(False);
  
  FHandles[0] := CreateEvent(nil, False, False, nil);
  // Управление завершением потока
  FHandles[1] := CreateEvent(nil, true, true, nil); // Управление паузой
  FHandles[2] := CreateEvent(nil, True, True, nil); // LogEvent
....
  SetEvent(FHandles[2]); //тестовый вызов, который не срабатывает
end;

Читал другие сайты, якобы нужно юзать WaitForSinglObject, но ведь WAIT_OBJECT_0 и WAIT_OBJECT_0+1 срабатывает?
и не уверен, что передавать нужно @FHandles[0] или @FHandles?
Ответить с цитированием