Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > indy


Автор: Dapo 5.3.2003, 13:43
Извиняюсь за тупую формулировку темы, но как-то сформулировать не могу. А вопрос вот в чем:
Делаю приложение которое собирает данные с контроллера. Обмен с контроллером налажен и реализован в отдельном потоке. Там же (в потоке) формирую строку (собственно собранные данные) для передачи ее клиентам подключенным по TCP посредством компонента Indy TTcpServer. Строка передается посредством св-ва моего потока:
property OutStr:string read FOutString;
В OnExecute TCPServer-а пишу:
Код

procedure TMainFrm.TCPSvrExecute(AThread:TIdPeerThread);
var TempThr:TCommThread;
      s:string;
begin
  s:=AThread.Connection.readln;
  TempThr:=GetThreadByPort('COM1');//моя процедура
  if  TempThr<>nil then
  begin
      if s<>'' then
      AThread.Connection.Writeln(TmpThread.OutStr);
  end;
end;

Где конкретно ошибка сказать не могу, прога просто виснет после того как клиент пытается прочесть данные с сервера. Может проблема в синхронизации (ведь для каждого TCP-клиента создается отдельный поток). Хотя, если где-то в проге присваиваю значение TmpThread.OutStr, например, Caption-у главной формы (передаю в основной поток), то все работает нормально и не виснет. В чем может быть дело?
Понимаю, что вопрос абстрактный, но может есть какие-то соображения?
PS. Пробовал передавать в DdeServerItem, тоже все работает. Но DDE не подходит по ряду причин.

Автор: SmaLL 6.3.2003, 01:09
Я бы так сказал: Indy - сырые и кривые компоненты. Может быть дело именно в этом !

Автор: Dapo 6.3.2003, 14:46
Не кривее NetMaster (Почему борланды их заменили?). Я уже писал проги на основе Indy и все работало замечательно. Просто не сталкивался с подобным, хотя конечно дело может быть и в их глюкавости.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)