Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобрать TThread   Найти похожие ветки 

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

Вообщем вот вопрос.

Если консольное аппликатион.

кусок из него;

while true do
begin
<...>
Stri := var_TIdTCPClient.ReadLn;
<...>
Stri2 := DateTimeToStr(Now);
WriteLn(Stri2);
<...>
end;

Модель очень упрощенная. Названия вроде должны говорить о типах данных.
Штука в том, что пока ответ на var_TIdTCPClient не придет кусок с выводом на экран не выполняется, а хотелось чтобы постоянно выполнялся. В примере в каталоге Demos как-то не разобрался, может кто наваять че-нить работающее по МОЕМУ примеру?


 
LMD   (2003-05-21 16:25) [1]

А если чтение данных загнать в таймер?


 
alt7   (2003-05-21 16:27) [2]

Дык Readln сидит и ждет возвращения данных с сокета то есть пока не получит ничего не происходит. И таймеры использовать нельзя. (по другим причинам)


 
Digitman   (2003-05-21 16:52) [3]


> alt7


я не в курсе насчет Indy, но сомневаюсь, что в TIdTCPClient нельзя задействовать режим асинхронных нотификаций


 
alt7   (2003-05-21 17:39) [4]

Не нашел там такого, так что вопрос остается


 
Ihor Osov'yak   (2003-05-21 18:51) [5]

> нельзя задействовать режим асинхронных нотификаций

С инди работал мало, но кажется мне что инди работает только в синхронном режиме. Вариант - запускаем в отдельном потоке (я собственно так и делал) , или юзаем TIdAntiFreeze. Но последнее для консоли вряд-ли пройдет, так как этот компонент задействует forms. Посему - только отдельный поток..


 
Ihor Osov'yak   (2003-05-21 18:52) [6]

Зы - а стандартные делфийские сокеты почему не подходят?


 
Zelius   (2003-05-21 20:04) [7]

1. Использовать ReadTimeout, тогда если в течении таймаута ничего не придет, то программа продолжит выполнение.
2. Использовать if Readable then ReadLN.


 
alt7   (2003-05-22 10:54) [8]

Ага.

ReadTimeout в хелпе не нашел. А Readable это из TIdSocketHandle, а как до него добраться из TIdTCPClient? Если б это сделать, то усе проблемы были бы решены ;))


 
Digitman   (2003-05-22 11:00) [9]


> Ihor Osov"yak



> для консоли вряд-ли пройдет, так как этот компонент задействует forms


а что, собственно, мешает консольному приложению использовать forms ? imho - ничто)

стандартные TClientSocket/TServerSocket так же используют этот модуль, однако с успехом работают в любом приложении - и в консольном, и в GUI, и в службе..


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

Потом портировать в Kylix. Тоже консольное, демон. А QForms требует XWindow


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

TIdAntiFreeze для консоли вряд-ли пройдет, не потому, что этот компонент задействует forms, а потому, что предназначем совсем для другого.
Он дает возможность приложению обрабатывать сообщения во время выполнения синхронных методов, что бы не замораживать пользовательский интерфейс.
Зачем он может понадобиться в консоли - большая загадка для меня.


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

Граждане возобновим тред.

try
Buffer := vIdTCPClient.Readln;
except
on EIdReadTimeOut do Buffer := "";
end;

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


 
testthewest   (2003-05-22 12:57) [13]

запускать не из IDE или в настройках выключить integrated debugging


 
Zelius   (2003-05-22 13:58) [14]


> alt7 (22.05.03 10:54)
> Ага.
>
> ReadTimeout в хелпе не нашел.

TIdTCPConnection.ReadTimeout - похоже что у тебя старый Инди, обнови его! Я работаю с Дельфи7 - там в хелпе есть.

> А Readable это из TIdSocketHandle,
> а как до него добраться из TIdTCPClient? Если б это сделать,
> то усе проблемы были бы решены ;))

TIdIOHandler.Readable, то есть idTcpClient.IOHandler.Readable(...)


 
alt7   (2003-05-22 14:10) [15]

Во пасибо тебе огромное, заработало. ;)))
Поставил бы тебе пива, если б ты жил в Донецке!
Ты же не живешь, правда? ;))

а насчет Инди, у меня последняя стоит, просто хелп от Делфи, я отдельный хелп потом выкачал от Инди


 
Zelius   (2003-05-22 14:22) [16]


> alt7 (22.05.03 14:10)

А вообще, для ИНди, лучший хелп - это ее исходники!



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

Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
6-3046
Gross
2003-04-01 22:01
2003.06.02
есть ип! надо узнать имя юзера, под которым он залогинился


14-3057
Separator
2003-05-14 07:30
2003.06.02
Решение систем уравнений


1-2909
bloodman
2003-05-18 20:59
2003.06.02
Материал про


14-3122
vajo
2003-05-14 13:19
2003.06.02
Insufficient memory for this operation


6-3031
Dennis S
2003-04-02 11:34
2003.06.02
Локальная сеть и инфо





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