Главная страница
    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.035 c
14-1080119523
Nikolay M.
2004-03-24 12:12
2004.04.18
internet.mp3 - 2


1-1080289324
kdy
2004-03-26 11:22
2004.04.18
Как отловить событие сворачивания формы?


14-1079877087
panov
2004-03-21 16:51
2004.04.18
Срочно нужна помощь!


3-1079865966
Leonid
2004-03-21 13:46
2004.04.18
Взаимодействие InterBase с Delphi


1-1080707445
sapsi
2004-03-31 08:30
2004.04.18
Rx clock





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский