Текущий архив: 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.45 MB
Время: 0.036 c