![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Виснет прога
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)
> вот-вот... а поподробне для чайников можно как это осуществить...
Для "чайников" существует конференция "Начинающим".