Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
1-1129551717
Bagdat
2005-10-17 16:21
2005.11.06
Маска в StringGrid


2-1129023909
romas
2005-10-11 13:45
2005.11.06
Providor для FoxPro в ADOConnection


14-1129122903
Антоний
2005-10-12 17:15
2005.11.06
Для печати проспектов


6-1121624450
Malik
2005-07-17 22:20
2005.11.06
смена своего IP


14-1129051858
Galiaf
2005-10-11 21:30
2005.11.06
Синий экран в Windows XP SP 2.





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