Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

виснет клиент из примера по 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.031 c
11-1062831013
dictator
2003-09-06 10:50
2004.04.18
Как реагировать на 2-е колесо мыши?


3-1079603537
Volodya_
2004-03-18 12:52
2004.04.18
DBTreeView


1-1080925481
Ivolg
2004-04-02 21:04
2004.04.18
Кнопки в ворде


3-1080029292
VIB
2004-03-23 11:08
2004.04.18
DBGrid


14-1080413355
PVOzerski
2004-03-27 21:49
2004.04.18
NTLDR is missing





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский