![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
виснет клиент из примера по Indy (Chat) [D7, Win2k]
john © (2003-12-27 07:05:00)там по таймеру выполняется:
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);
в результате программка виснет намертво.
задача: прочитать из клентского сокета блок данных заранее неизвестной длины. кто что может присоветовать?
Polevi (2004-02-16 18:20:00) [1]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
DAnton (2004-02-16 15:36:00) [2]Аааэээээ.
Я конечно прошу Вашего прощения, за свою неопытность в задавании вопросов. Начинающий Я пока что. Ж-)
А в 3-х строка можешь описать как его выкинуть в отдельный поток?
Очень хоца что б работало.
Заранее благодарю.
Digitman (2004-02-16 12:28:00) [3]
> Вот кто ЭТО может объяснить. тот настоящий дельфист?
а при чем здесь "дельфист" или "не дельфист", "настоящий" или "не настоящий" ?
есть WinAPI, есть WinsockAPI .. вызовы в их составе делятся на блокирующие и не блокирующие ... блокировка имеет смысл в контексте конкретного кодового потока ... что тебе еще объяснять ? ... убирай работу с Indy в доп.код.поток и будет тебе "счастье" - никаких антифризов и "форма мышу слушает" !
DAnton (2004-02-16 12:11:00) [4]Доброго времени суток всем.
Многое было сказано по этой теме, сам мучаюсь с этим примером и испытываю полное негодование.
Без Антифриза у меня вешается полностью прога.
С Антифризом, всё нормально (относительно), если не считать что мышу не слушает форма (не перетащить, ни в поле какое-либо перейти), а клава пашет стабильно.
Пробовал под всеми виндами.
Вот кто ЭТОможет объяснить. тот настоящий дельфист?
Ж-))))
Digitman (2003-12-27 11:12:00) [5]на кой шут такой таймаут нужен - 5 мсек ?
при пересчете в допустимые интервалы таймера такой таймаут превратится в INFINITE ! разрешение сист.таймера - платформозависимая величина ..
указывай таймаут не менее 50 - 60 мсек