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

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

Виснет прога


Страницы:   1 2

Pol ©   (2006-10-05 16:57:00) 

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


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


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


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


Kolan   (2006-10-06 15:57:00) [2]


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

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


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


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


Врешь.

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


Kolan   (2006-10-06 15:47:00) [4]

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


Kolan   (2006-10-06 15:45:00) [5]


> 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...


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

да убрал синхронизе
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:15:00) [7]

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


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

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 14:55:00) [9]


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

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


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

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


Ketmar   (2006-10-06 14:02:00) [11]

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


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


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


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


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

в synchronize


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

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


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


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

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


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

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


pavel_guzhanov   (2006-10-06 09:23:00) [17]

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


Джо   (2006-10-05 17:22:00) [18]

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

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


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

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


Джо   (2006-10-05 17:17:00) [20]

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

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


Страницы:   1 2

Наверх

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