Главная страница
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.027 c
1-1079145958
Александр1
2004-03-13 05:45
2004.04.04
Работа с TabControl1


7-1074269828
Magician
2004-01-16 19:17
2004.04.04
Как ввести программно данные в поля входа в систему(Win2k).


1-1079085420
ORMADA
2004-03-12 12:57
2004.04.04
Синхронизация 2-х Memo


11-1057497948
JanvVlad
2003-07-06 17:25
2004.04.04
OnCheck в TreeView


3-1078201011
Алексей Петухов
2004-03-02 07:16
2004.04.04
Оптимизация БД