Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

виснет клиент из примера по Indy (Chat)   Найти похожие ветки 

 
john   (2003-12-27 07:05) [0]

там по таймеру выполняется:

if not IdTcpClient1.Connected then
   exit;

 Msg := IdTCPClient1.ReadLn("", 5);

 if Msg <> "" then
   if Msg[1] <> "@" then
     begin
     { Not a system command }
       memLines.Lines.Add(Msg);
     end
   else
     begin
     { System command }
       Com := UpperCase(Trim(Copy(Msg, 2, Pos(":", Msg) -2)));
       Msg := UpperCase(Trim(Copy(Msg, Pos(":", Msg) +1, Length(Msg))));
       if Com = "CLIENTS" then
         lbClients.Items.CommaText := Msg;
     end;

и в какой то момент времени он не выходит из
Msg := IdTCPClient1.ReadLn("", 5);
в результате программка виснет намертво.

задача: прочитать из клентского сокета блок данных заранее неизвестной длины. кто что может присоветовать?


 
Digitman ©   (2003-12-27 11:12) [1]

на кой шут такой таймаут нужен - 5 мсек ?

при пересчете в допустимые интервалы таймера такой таймаут превратится в INFINITE ! разрешение сист.таймера - платформозависимая величина ..

указывай таймаут не менее 50 - 60 мсек


 
DAnton   (2004-02-16 12:11) [2]

Доброго времени суток всем.

Многое было сказано по этой теме, сам мучаюсь с этим примером и испытываю полное негодование.
Без Антифриза у меня вешается полностью прога.
С Антифризом, всё нормально (относительно), если не считать что мышу не слушает форма (не перетащить, ни в поле какое-либо перейти), а клава пашет стабильно.
Пробовал под всеми виндами.

Вот кто ЭТО может объяснить. тот настоящий дельфист?
Ж-))))


 
Digitman ©   (2004-02-16 12:28) [3]


> Вот кто ЭТО может объяснить. тот настоящий дельфист?


а при чем здесь "дельфист" или "не дельфист", "настоящий" или "не настоящий" ?

есть WinAPI, есть WinsockAPI .. вызовы в их составе делятся на блокирующие и не блокирующие ... блокировка имеет смысл в контексте конкретного кодового потока ... что тебе еще объяснять ? ... убирай работу с Indy в доп.код.поток и будет тебе "счастье" - никаких антифризов и "форма мышу слушает" !


 
DAnton   (2004-02-16 15:36) [4]

Аааэээээ.

Я конечно прошу Вашего прощения, за свою неопытность в задавании вопросов. Начинающий Я пока что. Ж-)

А в 3-х строка можешь описать как его выкинуть в отдельный поток?
Очень хоца что б работало.
Заранее благодарю.


 
Polevi ©   (2004-02-16 18:20) [5]

TMyThread.Execute
var
c:TIdTcpClient;
Msg:string;
begin
c:=TIdTcpClient.Create(nil);
try
 try
  ...
  ...
  c.Connected:=true;
  while not Terminated and c.Connected do
  begin
   Msg := IdTCPClient1.ReadLn(..;    
   ...
   ...
  end;
 except
 end
finally
 c.Free;
end
end



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
14-1080295305
Nick-From
2004-03-26 13:01
2004.04.18
Симплексный метод


3-1079609866
stas
2004-03-18 14:37
2004.04.18
Расширенные хранимые процедуры под MSSQL SERVER2000


7-1076698012
Khabibulin
2004-02-13 21:46
2004.04.18
Display


3-1079782097
Oleksiy
2004-03-20 14:28
2004.04.18
Как отобразить собраненный в базе данных jpeg?


3-1079605222
sergej
2004-03-18 13:20
2004.04.18
Local sql