Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Вниз
Параллельная работа двух задач Найти похожие ветки
← →
Джек (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c