Indy Tcpserver

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

Frodo

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

Код:
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;
....
Проблема такая что при подключении клиента к серверу он создает поток.При получении команды от клиента сервер пытается внутри потока запустить еще один поток для открытия вордовского документа.

Как на время остановить или закрыть поток созданный сервером и передать управления для работы с вордом
 
Z

zubr

Гость
#2
Код:
AThread.Suspend;//останавливаем поток
 WordApplication1.Documents.Open(DocName,EmptyParam, EmptyParam, EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
 WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
AThread.Resume;//продолжаем выполнение потока
 
F

Frodo

Гость
#3
попробовал но никаного эффекта. все что следует после

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

Можно ли из вне (не из OnExecute) вызвать Suspend? и если можно то как?
 
B

Barmutik

Гость
#4
Лучше из потока ставить Ваше задание на открытие документа к примеру в основном потоке приложения и уже потом оттуда его брать и з очереди заданий и открывать...

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