Текущий архив: 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