Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
1-1078941592
Raids
2004-03-10 20:59
2004.04.04
QuickReport не правильно считает по группам


3-1078773828
ceval
2004-03-08 22:23
2004.04.04
как названия поля сделать по середине


14-1079013962
Sentinel
2004-03-11 17:06
2004.04.04
Куда-то "подевался" логин.


11-1058333717
IronWit
2003-07-16 09:35
2004.04.04
как открыть на редкатирование определенную ячейку в listview


4-1074854466
kentavr
2004-01-23 13:41
2004.04.04
Helpme please




   Наверх