Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

Виснет прога   Найти похожие ветки 

 
Pol   (2006-10-05 16:57) [0]

сделал программку, которая отправляет почту... все прекрасно работает, но как обычно есть одно но... во время отправки прога виснет... прогрессбар движется, все ок, в остальном ни на что не реагирует пока не отошлет... можно как-то это победить, ведь "нормальные" почтовики не виснут


 
Джо ©   (2006-10-05 17:03) [1]

Отправка в отдельном потоке?


 
Kolan ©   (2006-10-05 17:14) [2]

Дополню :)
Отправка в отдельном потоке.


 
Pol   (2006-10-05 17:16) [3]

вот-вот... а поподробне для чайников можно как это осуществить...


 
Джо ©   (2006-10-05 17:17) [4]

> [3] Pol   (05.10.06 17:16)
> вот-вот... а поподробне для чайников можно как это осуществить...

Для "чайников" существует конференция "Начинающим".


 
Pol   (2006-10-05 17:20) [5]

и все же если незатруднит примерчик или ссылку на доки по работе с потоками


 
Джо ©   (2006-10-05 17:22) [6]

> [5] Pol   (05.10.06 17:20)
> и все же если незатруднит примерчик или ссылку на доки по
> работе с потоками

TThread + F1.
Пример смотри в папке:
<DELPHI>\Demos\Threads


 
pavel_guzhanov ©   (2006-10-06 09:23) [7]

а еще очень хорошо про потоки описано в "Borland Delphi6. Руководство разработчика" Тейксейры и Пачеко. На сайте Анатолия Подгорецкого можешь эту книгу скачать http://www.podgoretsky.com/ddp.html


 
Pol   (2006-10-06 12:15) [8]

Всем спасибо, научился пользоваться потоками... Сделал процедуру отправки  в отдельном потоке, но прога все равно виснет


 
Рамиль ©   (2006-10-06 13:44) [9]


> Сделал процедуру отправки  в отдельном потоке, но прога
> все равно виснет

Отправка, надеюсь, не в synchronize?


 
Ketmar ©   (2006-10-06 13:50) [10]

>[9] Рамиль(c) 6-Oct-2006, 13:44
>Отправка, надеюсь, не в synchronize?
ой, чую, без архангельского не обошлось... %-)


 
Pol   (2006-10-06 13:51) [11]

в synchronize


 
Сергей М. ©   (2006-10-06 13:52) [12]


> Pol   (06.10.06 13:51) [11]
>
> в synchronize
>


Значит не научился.


 
Ketmar ©   (2006-10-06 14:02) [13]

ну точно -- архангельский. когда же его макулатуру сожгут?


 
Pol   (2006-10-06 14:53) [14]

да уж... интересно зачем нужен форум, если помощи в нем нет... неужели все сразу умными родились???


 
Kolan ©   (2006-10-06 14:55) [15]


> Pol   (06.10.06 13:51) [11]
>
> в synchronize

Значит и выполнится в контексте главного потока. И опять таки будет виснуть...


 
Pol   (2006-10-06 15:01) [16]

type
 TMyThread = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 public

 param:string;
 procedure send; virtual;
 end;

implementation
uses uMain;

procedure TMyThread.send;
begin
.....
end;

procedure TMyThread.Execute;
begin
send;
end;

end.

в главной форме делаю TMyThread.Create(false) - виснет


 
Kolan ©   (2006-10-06 15:15) [17]

Дык а где Synchronize? И код Send?


 
Pol   (2006-10-06 15:36) [18]

да убрал синхронизе
procedure sen;
  with form1.IdMsgSend do
     begin
        From.Text := "sss@sss.ss";
        Subject := "ssss";
        Recipients.EMailAddresses := qqq@qqq.qq;
     end;
 TIdAttachment.Create(form1.IdMsgSend.MessageParts,"c:\xxx.xxx");

  form1.SMTP.AuthenticationType := atLogin;
  form1.SMTP.Username := wwww;
  form1.SMTP.Password := 1111;

  form1.SMTP.Host := sss.ss;
  form1.SMTP.Port := 25;

  form1.SMTP.Connect;

  try
     form1.SMTP.Send(form1.IdMsgSend);
  finally
    form1.SMTP.Disconnect;

    form1.IdMsgSend.Clear;
end;


 
Kolan ©   (2006-10-06 15:45) [19]


> with form1.IdMsgSend do
>      begin
>         From.Text := "sss@sss.ss";
>         Subject := "ssss";
>         Recipients.EMailAddresses := qqq@qqq.qq;
>      end;

Заруби себе на носу. Почти все VCL компоненты НЕ потоко безопасны! Поэтому их нельзы использовать внутри доп потоков.

Тебе нужен IdMsgSend или SMTP(не знаю что это такое:) создай их в потоке. там и пользуй.

Те. Например:

TMyThread = class(TThread)
private
  { Private declarations }
  FSMTP: TSMTP; //Или как там правильно...
protected
  procedure Execute; override;
public


А а вот когда надо будет вывести данные на форму, тогда и пригодится Sychronize...


 
Kolan ©   (2006-10-06 15:47) [20]

Если объекты используются в нескольких потоках. Например в главном и доп. то нужна синхронизация. Простейший вариант TCriticalSection.


 
Сергей М. ©   (2006-10-06 15:50) [21]


> делаю TMyThread.Create(false) - виснет


Врешь.

Код поточного класса в данном виде не может приводить к "зависанию" осн.потока.


 
Kolan ©   (2006-10-06 15:57) [22]


> Сергей М. ©   (06.10.06 15:50) [21]
> Врешь.

Не врёт, а не понимает.


 
Сергей М. ©   (2006-10-06 16:01) [23]


> Kolan ©   (06.10.06 15:57) [22]


Именно врет.
Потому что при трассировке в пошаговом режиме строчка TMyThread.Create(false) при указанной реализации поточного класса не может привести к зависанию.



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.124 c
15-1159504837
Gleb Stah
2006-09-29 08:40
2006.10.22
Плагин для Opera


15-1159466282
FedorC
2006-09-28 21:58
2006.10.22
Удаленка для Delphi программиста со знанием английского


2-1160040447
lobach
2006-10-05 13:27
2006.10.22
Ошибка


2-1159901078
MOVEz
2006-10-03 22:44
2006.10.22
WriteBinaryData


15-1159393229
Yegorchic
2006-09-28 01:40
2006.10.22
Power Point и звук в презентации