![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIdPOP3 .Connect - ошибка Thread creation error. Not... [D7, WinXP]
fishka © (2006-08-08 11:37:00)Программа считывает из почтового ящика сообщения и записывает их (текст, уникальный номер, дату) в таблицу Ms SQL. Все работает нормально, пока не придет спам. При этом после окончания цикла необходимо сделать disConnect (чтобы удалились письма), но потом на строчке:
IdPOP3 .Connect- возникает ошибка Thread creation error. Not enough storage is avaiable to process this command.
И коннекта не происходит, такое происходит не после каждого спама, но понять я не могу, в чем причина. Если нет спама, то все работает без сбоев.
Try .. except - везде стоят.
Что нужно почистить, настроить....?
Slym (2006-08-09 16:05:00) [1]Требую отделить чекбоксы от popEmail!
Сергей М. (2006-08-09 15:59:00) [2]
> Речь идет об ошибке, а не ТЗ на программу
Твоя ошибка растет именно из-за несуразного проектирования программы, которое есть следствие туманного ТЗ)
fishka (2006-08-09 15:43:00) [3]CheckBox (и не только) есть на форме. Речь идет об ошибке, а не ТЗ на программу.
Сергей М. (2006-08-09 15:40:00) [4]
> Но может отключить таймер
Чем?
Чем он включает таймер ? Чем он его отключает ?
Тобой упомянута лишь одна кнопка..
fishka (2006-08-09 15:36:00) [5]Юзер ничего не подумает. Но может отключить таймер и сам запускать чтение из почты нажатием на кнопку. Вообще-то прога работает уже несколько месяцев, только после некоторых писем (которые почему-то всегда спам), не подключается к ящику, и приходится ее закрывать и открывать. А вообще прога должна работа без участия человека.
Сергей М. (2006-08-09 14:54:00) [6]
> программа должна работать и без таймера. - Вот и все ТЗ
Фтопку такое ТЗ.
Или программу, даже такоеТЗ не выполняющую.
Спрашивается, что должен думать юзер, видящий одну-единственную кнопку на форме ? То ли жмакнув ее он запустит чтение почты однократно, то ли многократно периодически ..
Короче, продумай ТЗ, езжай в "Начинающие" и повтори вопрос.
fishka (2006-08-09 14:45:00) [7]
> это процедура обработки события таймера
> Насколько я понимаю, клик кнопки должен вызвать немедленное
> чтение почты и запуск таймерного механизма повтора этого
> "действа" .. Я прав ?
Конечно.
Но программа должна работать и без таймера. - Вот и все ТЗ.
> это процедура обработки события таймера
Опять прав. Просто был текст другой........
Сергей М. (2006-08-09 14:30:00) [8]Ты вообще ТЗ в состоянии привести хоть в каком бы то ни было виде ?
Сергей М. (2006-08-09 14:24:00) [9]
> Это процедура включения таймера
> procedure TForm1.Timer1Timer(Sender: TObject);
Ну что ты городишь, а ?)
Это НЕ процедура включения таймера - это процедура обработки событиятаймера ! Она вызывается не иначе когда таймер УЖЕ включен) ..
> 1. В процедуре чтения писем вставлено Timer1.Enabled:=False;
> ..
> а потом Timer1.Enabled:=True
ВОТ оно - управление "включенностью" таймера !)
Еще раз объясни требуемую логику.
Насколько я понимаю, клик кнопки должен вызвать немедленное чтение почты и запуск таймерного механизма повтора этого "действа" .. Я прав ?
fishka (2006-08-09 14:12:00) [10]fishka (09.08.06 11:30) [20]
Это процедура нажатия на кнопку.
fishka (09.08.06 12:01) [25]
Это процедура включения таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if BitBtn1.Enabled then
begin
BitBtn1Click(Form1);
end;
end;
fishka (09.08.06 12:53) [29]
1. В процедуре чтения писем вставлено Timer1.Enabled:=False;
а потом Timer1.Enabled:=True; (после чтения всех писем).
Понятно?
Сергей М. (2006-08-09 14:00:00) [11]
> Не понимаю вопроса
Что тут непонятного ?
Таймер включается установкой св-ва Enabled = True
При нажатии кнопки у тебя запускается собственно чтение почты, каковое не имеет отношения к таймеру. Ну а где и в какой момент у тебя включается таймер ?
fishka (2006-08-09 13:49:00) [12]Не понимаю вопроса.......
Таймер включается по времени через 10 сек (если предыдущие письма обработаны). В нем процедура нажатия кнопки, в которой то, что написано
(09.08.06 11:30) [20] .
Сергей М. (2006-08-09 13:46:00) [13]Я не спрашиваю про период таймера)
Меня интересует, когдаон включается..
fishka (2006-08-09 13:40:00) [14]Таймер через 10 сек (если предыдущие письма обработаны).
Сергей М. (2006-08-09 13:16:00) [15]
> fishka (09.08.06 13:12) [32]
Ты лучше объясни, в какой момент таймер у тебя должен включаться... Мне это пока не понятно из твоих объяснений ...
fishka (2006-08-09 13:12:00) [16]> не требуется реакция на события ввода
не знаю, может и потребоваться.
Буду ждать результатов. Раньше было до 3 суток работало все стабильно. Если перестанет коннектиться, напишу.
Slym (2006-08-09 12:58:00) [17]Проверку почты в поток!
в нем Event.WaitFor(TimeOut) - заменит таймер
Сергей М. (2006-08-09 12:58:00) [18]Если
> 2.Заменено на ProgressBar.Update
то никакие антифризы и прочие ProcessMessages не нужны, при условии что не требуется реакция на события ввода.
fishka (2006-08-09 12:53:00) [19]1. В процедуре чтения писем вставлено:
Timer1.Enabled:=False;
2.Заменено на ProgressBar.Update
3. IdAntifreezeесть на форме.
4.
> создание popEmail
Хочется обойтись без этого.
Что еще надо сделать?
Если ничего, то буду ждать результатов.
Сергей М. (2006-08-09 12:43:00) [20]
> Этого недостаточно?
Нет , не достаточно.
Запрещай работу таймера прямо в процедуре чтения почты.
> Убирать Application.ProcessMessages - не хочу. Хочу процентную
> линейку
Для этого есть метод ProgressBar.Update.
Кр.того, если без обработки событий ввода-вывода в момент чтения почты никак не обойтись, можно бросить на форму IdAntifreeze - он "оживит" интерфейс пользователя.
> создание popEmail по времени долго (мне так кажется)
Глупости)
К тому же это время несравнимо меньше периода срабатывания твоего таймера.