Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TIdPOP3 .Connect - ошибка Thread creation error. Not... [D7, WinXP]


Страницы:   1 2 3

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 у тебя сопровождается обязательным дисконнектом" - скорее всего так. Я же проверяю, коннектед или нет.
Я спрашиваю, что мне настроить, почистить...?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо