Использование потокобезопасного TIdHTTPServer в D2005 - PullRequest
0 голосов
/ 31 декабря 2018

Этот вопрос задавался очень часто, и я часами читал, пробовал, тестировал безрезультатно.

Полагаю, это связано с моей более старой версией 2005 года.

Нижеэто код, который я попробовал после прочтения сообщения на форуме Embarcadero, на который ответил Реми Лебо:

Тема: Как обрабатывать несколько сеансов HTTP с Indy10 TIdHTTPServer

procedure TMainForm.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  Msg : String;
begin
  if ARequestInfo.QueryParams <> '' then
  begin
    Msg := DateTimeToStr(Now) + ': ReqParam "' + ARequestInfo.QueryParams + '"';
    TThread.Queue(nil,
      procedure
      begin
        Memo1.Lines.Add(Msg);
      end
    );
    AResponseInfo.ContentText := '<HTML><BODY>Query Params found.</BODY></HTML>';
  end
  else
  begin
    AResponseInfo.ContentText := '<HTML><BODY>Error: No Query Params.</BODY></HTML>';
    Msg := DateTimeToStr(Now) + ': Error: No Query Params';
    TThread.Queue(nil,
      procedure
      begin
        Memo1.Lines.Add(Msg);
      end
    );
  end;
end;

То, к чему я стремлюсь, - это доступ к заметке или записи в файле журнала потокобезопасным способом. Каким-то образом использование TThread.Synchronize() или TThread.Queue() не компилируется.

При добавлении строки TThread.Queue() в соответствии с предложением Реми я получаю ошибку:

E2029 Выражение ожидается, но процедура найдена

У кого-нибудь есть альтернатива, которую я могу использовать в Delphi 2005?

Редактировать: это то, что я вижу из дополнения кода:

The design view for TThread

...