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

Вниз

Параллельная работа двух задач   Найти похожие ветки 

 
Джек   (2004-03-09 12:59) [0]

Возникла необходимость создать следующее приложение:
При запуске на основной форме (Form1) есть TMemo в которое подгружается из файла текстовая информация для последующей обработки. Есть желание параллельно (по нажатию кнопки) запустить задачу получения электронной почты, т.е. Form2 на которой есть элемент TClientSocket. При приеме e-mail текст сообщения добавляется в TMemo основной формы. С помощью потока (Thread) не получается, т.к. не знаю как его заставить получать событие TClientSocket OnConnect и др.
Надеюсь на вашу помощь (подсказки).


 
Джек   (2004-03-10 12:40) [1]

Неужели нет никаких идей? Или мой вопрос очень глупый?


 
Digitman ©   (2004-03-10 12:44) [2]


> Джек   (10.03.04 12:40) [1]


он не глупый, вопрос твой ... он не снабжен конкретностями

например, неясен режим работы кл.гнезда

если он асинхронный неблокирующий, то непонятно желание вынести работу с транспортом в доп.поток


 
Джек   (2004-03-10 13:04) [3]

Постараюсь уточнить. Работает задача по анализу текстовых сообщений. Хочу параллельно принимать почту, анализировать отправителя и добавлять полученное сообщение в общий тестовый массив для обработки. Для получения почты использую компонент TNMPOP3. Скорость приема почты не высокая. Когда работает компонент TNMPOP3 форма не реагирует на нажатие кнопок.
Как сделать чтобы обработка текста и получение+анализ почты выполнялись одновременно? Я что-то торможу. Старенький наверное:(


 
Digitman ©   (2004-03-10 13:10) [4]

так, стоп.

в ориг.вопросе никакой TNMPOP3 не фигурировал.
фигурировал же вместо этого TClientSocket.
по факту чего и были заданы уточн.вопросы, ибо при примерении TClientSocket вполне можно обойтись и без доп.код.потока, потому что компонент позволяет задействовать асинхр.ф-ции сетевого транспорта

откуда ни с того ни с сего взялся TNMPOP3 ?
на ходу что ли придумываешь ?


 
Джек   (2004-03-10 13:19) [5]

Вот, вот. Для того, чтобы уйти от блокировки компонентом TNMPOP3 я и решил попробывать TClientSocket. Ну и уперся в вопросы.
Если можно для получайника :) подробней о асинхр.ф-циях сетевого транспорта для TClientSocket.


 
Digitman ©   (2004-03-10 13:30) [6]

устанавливаешь режим ctNonBlocking (он - по умолчанию)

устанавливаешь обработчики событий OnConnect, OnDisconnect, OnRead, OnWrite, OnError

запускаешь механизм асинхр.коннекта вызовом Open()

в случае успешного коннекта в обработчике событий OnWrite посылаешь запросы к POP3-серверу, в обработчеке событий OnRead небольшими (!!) порциями считываешь данные, пришедшие от сервера в ответ на запросы и буферизуешь их, в случае наличия в буфере целиком пришедшего сообщения выбираешь его из буфера, анализируешь отправителя и т.д. и т.п. ... время работы каждого вызванного обработчика OnRead следует минимизировать, тогда GUI не будет "заморожен" и будет вполне адекватно реагировать на действия юзера


 
Джек   (2004-03-10 13:53) [7]

Спасибо! Попробую что-нибудь сваять.


 
Джек   (2004-03-12 18:14) [8]

В догонку. А чем отличается TClientSocket.Active:= true  от
TClientSocket.Open() ?


 
Digitman ©   (2004-03-12 18:23) [9]

ничем



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

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

Наверх




Память: 0.49 MB
Время: 0.023 c
6-1075273288
frost
2004-01-28 10:01
2004.04.04
Общение по сети.


1-1079554043
Ravilr
2004-03-17 23:07
2004.04.04
Проценты в калькуляторе!


1-1079612266
Сниф
2004-03-18 15:17
2004.04.04
Где можно взять подробный пример создания Com-объекта?


1-1079623145
Ivan
2004-03-18 18:19
2004.04.04
Access Violation при закрытии программы


4-1074785967
Acidlex
2004-01-22 18:39
2004.04.04
Как сделать SysTray Bar в своем приложении