![]() |
| ||
|
|
Новости |
Поиск |
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 - везде стоят.
Что нужно почистить, настроить....?
fishka (2006-08-09 12:31:00) [21]
> Динамически внутри процедуры создавай свой popEmail и работай
А создание popEmail по времени долго (мне так кажется). Где создавать в таймере?
Slym (2006-08-09 12:11:00) [22]Динамически внутри процедуры создавай свой popEmail и работай
fishka (2006-08-09 12:01:00) [23]Сейчас написано так:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if BitBtn1.Enabled then
begin
BitBtn1Click(Form1);
end;
end;
Этого недостаточно?
Убирать Application.ProcessMessages - не хочу. Хочу процентную линейку!
Сергей М. (2006-08-09 11:53:00) [24]Ах вон оно что !)
Убирай нафиг Application.ProcessMessages либо запрещай работу таймера на момент выполшнения этого алгоритма.
fishka (2006-08-09 11:44:00) [25]Если идти по F7, то возвращаемся в цикл for. Доходим до конца, потом по таймеру опять запускается. И уже тогда на строке popEmail.Connect;
вываливается вышеописанная ошибка.
Read_Email() - там много всего.
Сергей М. (2006-08-09 11:40:00) [26]Покажи что у тебя творится в Read_Email() ..
Slym (2006-08-09 11:37:00) [27]fishka (09.08.06 11:30) [20]
А кто тебе сказал что ошибка ЗдисЪ? может тут и нет ошибки... может ошибка в загадочном read_Email(i);
fishka (2006-08-09 11:30:00) [28]Программа вывалилась с той же ошибкой сегодня. За вчерашний день спамов было порядка 9. Но вывалилась на одном.
if (popEmail.Connected) then popEmail.Disconnect
else
begin
BitBtn1.Enabled:=False;
try //Connect
popEmail.Connect;
if popEmail.CheckMessages >0 then
begin
if (popEmail.CheckMessages>1000) then pp:=1000 else pp:=popEmail.CheckMessages;
ProgressBar1.Max:=pp;
for i:=1 to pp do begin
ProgressBar1.Position:=ProgressBar1.Position+1;
Application.ProcessMessages;
try
read_Email(i);
except
end;
end;//for
end; //if
finally
BitBtn1.Enabled:=True;
popEmail.Disconnect;
end;
end; // if connected
В чем ошибка?
Сергей М. (2006-08-08 16:12:00) [29]Надо же, какой ты догадливый)
fishka (2006-08-08 15:46:00) [30]Главное, в тот день, которого не бывает. 30 февраля, год тут не (ни?) при чем.
Сергей М. (2006-08-08 15:06:00) [31]
> fishka (08.08.06 14:51) [16]
Вот она тебе далась) ...
Не суть как важно, главное - не при царе Горохе)
fishka (2006-08-08 14:51:00) [32]Буду использовать finally. Как (если?) перестанет работать, напишу. Спасибо за поддержку.
Остался без ответа один вопрос о дате рождения отвечающего...
Сергей М. (2006-08-08 14:05:00) [33]
> fishka (08.08.06 13:58) [14]
while True do
try
Connect()
try
...
finally
Disconnect;
end;
except
...
end;
fishka (2006-08-08 13:58:00) [34]>Иначе если нет сети или перезагрузка, то вывалится ошибка
Это на здоровье<
Нет. Программа должна работать. И как только появится сеть и/или почтовый сервер, она должна считывать данные без вмешательства человека.
Сергей М. (2006-08-08 12:58:00) [35]
> Иначе если нет сети или перезагрузка, то вывалится ошибка
Это на здоровье)
Главное чтобы disconnect был в finally
fishka (2006-08-08 12:56:00) [36]д.б. try popEmail.Connect; Иначе если нет сети или перезагрузка, то вывалится ошибка.
Буду что-то менять, не знаю пока что........
Сергей М. (2006-08-08 12:51:00) [37]popEmail.Connect;
try
for i := 0 to количество писем - 1 do
try
read_Email(i);
except
.. здесь д.б. анализ класса/текста исключения ..
raise; //если исключение не связано с некорректностью заголовка и/или содержимого письма
end;
finally
popEmail.Disconnect;
end;
fishka (2006-08-08 12:38:00) [38]if not popEmail.Connected then
begin
try //Connect
popEmail.Connect;
for количество писем
try
read_Email(i);
except
memo1.Lines.add('Ошибка чтения письма');
end;
end;//for
memo1.Lines.add('Çàïèñàíî â pos '+IntToStr(count_pos));
except
on E: Exception do
begin
memo1.Lines.add(E.Message+' '+DatetimeToStr(now));
popEmail.Disconnect;
sleep(10000);
end;
end;
try
popEmail.Disconnect;
except
end;
end; // if connected
У меня здесь где-то ошибка?
Сергей М. © (08.08.06 12:26)
Ваша дата рождения для подтверждения ошибки в поле типа даты БД анкет?
Сергей М. (2006-08-08 12:26:00) [39]Общая схема д.б. такова:
Connect
try
.. прием и обработка почт.сообщений ..
finally
Disconnect
end;
fishka (2006-08-08 12:19:00) [40]Смотрю внимательно исх.код, отладчиком пользуюсь. Текст ошибки в вопросе. "в какой-то момент ресурсы процесса, требуемые для создания очередного доп.потока , оказываются исчерпанными" - это понятно.
"не каждый connect у тебя сопровождается обязательным дисконнектом" - скорее всего так. Я же проверяю, коннектед или нет.
Я спрашиваю, что мне настроить, почистить...?