Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

TiDAntiFreeze;   Найти похожие ветки 

 
alt7   (2003-05-21 18:06) [0]

Каков принцип работы?
Вот мне нужно использовать его в консольном приложении, где есть TiDTCPClient.Readln, то есть пока не прочтет инфу из сокета, то с места не сдвинется.

Что нужно написать, чтобы осталльная работа не стопорилась?
Некая такая конструкция имеется:

while true do
begin
<..>
TiDTCPClient.Readln;
<..>
WriteLn(buffer);
end;

Как заставить срабатывать WriteLn(Buffer независимо от того, пришли ли данные?)


 
Reindeer Moss Eater   (2003-05-22 10:03) [1]

В консольном приложении TiDAntiFreeze? Ну круто однако.
А зачем?

Как заставить срабатывать WriteLn(Buffer независимо от того, пришли ли данные?)

Ты имеешь ввиду читать с таймаутом <> бесконечность?


 
alt7   (2003-05-22 10:57) [2]

Да, почитал что TIdAntiFreeze там не поработает ;)))
Да, или таймаут поставить около 0.01сек или делать проверку на наличие информации в буфере чтения..

Как?


 
Reindeer Moss Eater   (2003-05-22 10:59) [3]

Что нужно написать, чтобы осталльная работа не стопорилась?
Сначала поведай, что хочешь получить в итоге.


 
alt7   (2003-05-22 11:18) [4]

while true do
begin
<..>
TiDTCPClient.Readln;
<..>
WriteLn(buffer);
end;

Ну вот там где readln счас стопорится пока инфа не придет. А надо чтобы или проверка или по таймауту дальше работало. А я напишу потом проверку что-то типа if(buffer<>"") then ляляля...

1) Как написать проверку?
2) Как установить таймаут?


 
Reindeer Moss Eater   (2003-05-22 11:22) [5]

Ты не понял.
А надо чтобы или проверка или по таймауту дальше работало

Что ты такое делаешь после возврата из ReadLn?


 
alt7   (2003-05-22 11:26) [6]

Много чего. Но главное, что программа работает с системным временем, если пауза при ожидании ответа с сокета затягивается более чем на секунду, то программа уже работать будет неправильно.


 
Reindeer Moss Eater   (2003-05-22 11:33) [7]

IdTCPClient1.ReadTimeOut:=5000;
IdTCPClient1.ReadLn(#$A,IdTimeoutDefault);
if IdTCPClient1.ReadLnTimedOut then ShowMessage("У нас таймаут");


 
alt7   (2003-05-22 11:37) [8]

Это какой Делфи?? Мой 6-ой и ругается что не знает, что такое ReadTimeOut...

И что значит #$A ?


 
Reindeer Moss Eater   (2003-05-22 11:43) [9]

uses idGlobal;

И это не Delphi, это Indy последнего релиза.

И что значит #$A ?
Ну символ с кодом $0A наверное. Или с кодом 10 или LF.


 
alt7   (2003-05-22 11:47) [10]

Ну у меня стоит версия 9.00.11 выкачивал дето дней 10 назад.
Не работает даже с этим uses

А то видимо код конца строки?


 
Reindeer Moss Eater   (2003-05-22 11:51) [11]

Печальный случай.
Не пробовал поискать файлы *.pas в каталоге Indy, содержащие "IdTimeoutDefault"?


 
alt7   (2003-05-22 12:08) [12]

Переставил Indy. Вроде Timeout хавает счас проверю остальное


 
alt7   (2003-05-22 12:24) [13]

Ага, работает но возникает EIdReadTimeout-исключение, когда timeout срабатывает, можно ли его как-то отключить? Чтоб не срабатывало исключение, и моя прога работала дальше как ни в чем не бывало?


 
Reindeer Moss Eater   (2003-05-22 12:27) [14]

Разработчики старались, трудились, давая возможность пользователям библиотеки знать, что происходит во время выполнения методов, а неблагодарные пользователи хотят выключить исключения.
Их не отключать надо, а обрабатывать!!!


 
alt7   (2003-05-22 12:31) [15]

ага я написал:
try
Buffer := vIdTCPClient.ReadLn; <--|
except |
on EIdReadTimeOut do Buffer := ""; |
end; |
|
Так у меня прога все равно вылетает на второй строке -|


 
Reindeer Moss Eater   (2003-05-22 12:36) [16]

1. А если исключение будет не EIdReadTimeOut, а например дисконнект, или превышение максмальной длины строки?
Где обработака?

2. "Прога" не вылетает. Это встроенный отладчик среды, из под которого ты запускаешь проект останавливается на исключениях.


 
alt7   (2003-05-22 12:40) [17]

Я про первый пункт не говорю.
Я спрашиваю что сделать нужно, чтобы при таймауте прога продолжала работать как будто-бы исключение не произошло


 
Reindeer Moss Eater   (2003-05-22 12:55) [18]

Прога, или среда?
Ты определись с понятиями уже.


 
alt7   (2003-05-22 12:57) [19]

Че тут определяться, прога - моя программа, среда - IDE


 
alt7   (2003-05-22 12:59) [20]

Да и кстати кто-то говорил про Readable, но функция эта в TIDSocketHandle, а как до нее добраться из TIDTCPClient?


 
Reindeer Moss Eater   (2003-05-22 13:01) [21]

Че тут определяться, прога - моя программа, среда - IDE

А Волга, например, впадает в Каспийское море.


 
alt7   (2003-05-22 13:03) [22]

Это не по-существу. Давай не отклоняться от темы. Я спросил, ты можешь ответить?


 
Reindeer Moss Eater   (2003-05-22 13:06) [23]

Боюсь что нет.
Трудно ответить что-то человеку, который не может сказать что ему надо.


 
alt7   (2003-05-22 13:11) [24]

Вопрос:
try
Buffer := vIdTCPClient.Readln;
except
on EIdReadTimeOut do Buffer := "";
end;

Как сделать так чтоб при исключении не вылетало окошко о нем в IDE и при запуске *.exe не выскакивало сообщение о неизвестном исключении и моя программа продолжала работать??


 
Reindeer Moss Eater   (2003-05-22 13:15) [25]

Настроить опции IDE касающиесся встроенного отладчика. "Break On Exceptions"


 
alt7   (2003-05-22 13:18) [26]

Это где?
Я вот зашел Tools -> Debugger Options -> Language Exceptions -> Exception Types To Ignore

Добавлял сюда и EIdReadTimeOut и EIdException, все равно выскакивает окошко...



Страницы: 1 вся ветка

Текущий архив: 2003.07.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
4-91958
TaveL
2003-05-23 21:50
2003.07.28
Использование GetFontResourceInfo


14-91903
Knight
2003-07-11 01:04
2003.07.28
Apache


14-91837
Дмитрий К.К.
2003-07-10 06:13
2003.07.28
Именинники 10 июля


1-91747
Timoty
2003-07-15 14:36
2003.07.28
Treeview


1-91726
LKJJ
2003-07-14 14:36
2003.07.28
Как сделать полупрозрачную форму?