Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизTIdTCPClient - InputBuffer Найти похожие ветки
← →
vers © (2005-07-22 18:59) [0]Все тот же многострадальный TCP-чат на Indy. В этот раз на Indy 10 :) Клиент создает поток для прослушки сообщений от сервера, чтоб не тормозило прорисовка формы и делает там:
while not Terminated do
begin
msg:="";
try
msg:=cclient.ReadLn(#13#10,5);
except
on EIdReadTimeOut do ;
end;
If msg<>"" then
begin
....
end;
end;
Глюки появляются наистраннейшие: пропадают в никуда самые разные сообщения от сервера. Видимо, где-то все-таки наглючил...
Решил убрать этот поток и повесить опрос на обычный таймер, а чтоб интерфейс не тормозил, делать не ReadLn, а предварительно проверять InputBuffer.Size. Но вот проблема, он обновляется не когда придут данные, а только тогда, когда я выполняю Read :( Вопрос: как обновить буфер, не выполняя Read? Ведь раз данные к клиенту пришли и где-то его ожидают, можно посмотреть их наличие заранее перед чтением, или нет?
Или может плюнуть на Indy и переделать чат, используя что-то другое?
← →
Reindeer Moss Eater © (2005-07-22 22:01) [1]Решил убрать этот поток и повесить опрос на обычный таймер
Там все методы синхронные.
Зачем там таймер?
← →
vers © (2005-07-23 00:10) [2]Угу... Я полежал немного, подумал... И решил все переделать под TClientSocket в асинхронном режиме. Код уменьшился раза в два и стал более понятным для меня :) А сервер остался тот же - IdTCPServer.
Насчет таймера - да, ни к чему :) Просто в демках от разработчиков Инди он есть, думал может с ним правильнее...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.039 c