• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Indy Tcpserver

  • Автор темы Автор темы Frodo
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
F

Frodo

Задача: при получении команды от клиента сервер должен открыть в ворде документ.

Код:
uses
...Word2000,IdComponent, IdTCPServer....

procedure TMainForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
Ss:String;
DocName:OleVariant;
begin
DocName:='C:\boot.doc';
try
with AThread.Connection do
begin
 Ss:=ReadLn();
 if Ss='Get' then
 begin
  WordApplication1.Documents.Open(DocName,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
 end;
....

Проблема такая что при подключении клиента к серверу он создает поток.При получении команды от клиента сервер пытается внутри потока запустить еще один поток для открытия вордовского документа.

Как на время остановить или закрыть поток созданный сервером и передать управления для работы с вордом
 
Код:
AThread.Suspend;//останавливаем поток
 WordApplication1.Documents.Open(DocName,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
AThread.Resume;//продолжаем выполнение потока
 
попробовал но никаного эффекта. все что следует после

Код:
AThread.Suspend;

просто не выполняется. Может это какой то глюк Indy 8 (у меня эта версия стоит)

Можно ли из вне (не из OnExecute) вызвать Suspend? и если можно то как?
 
Лучше из потока ставить Ваше задание на открытие документа к примеру в основном потоке приложения и уже потом оттуда его брать и з очереди заданий и открывать...

А с другой стороны в чём проблема что Вы из потока клиента создаёте ещё один поток ?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab