Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по делфи

Влад Меркулов Профи (997), на голосовании 11 лет назад
Выдаёт ошибку где то в куске кода:
procedure TForm1.StartClick(Sender: TObject);
var pot:integer;
begin
off:=false;
Start.Enabled:=False;
Stop.Enabled:=True;
otpravleno:=0;
nado:=strtoint(Pisem.Text);
if (strtoint(Potoki.Text) >= 1) and (strtoint(Potoki.Text) <= 50) and (strtoint(pisem.text) >= 1) then
begin
if (otkogo.Text <> '') and (komu.Text <> '') and (tema.Text <> '') and (Pismo.Text <> '') then
begin
for pot:=1 to strtoint(Potoki.text) do
a[pot]:=potok.Create(false);
end
else
MessageDlg('Не заполнено одно из полей информации об отправке сообщений! ', mtWarning, [mbOK, mbOK], 0);
end
else
MessageDlg('Не верно задано количество потоков или количество сообщений', mtWarning, [mbOK, mbOK], 0);
end;

procedure potok.Execute;
var randchisl, i:integer;
HTTP:TidHTTP;
begin
Form1.Status.Caption:='Отсылается спам';
Form1.CoolTrayIcon1.IconIndex:=2;
while nado <> otpravleno do
begin
if off = true then
begin
break;
Form1.HTTP.Free;
Data.Free;
off:=false;
end;
HTTP:= TIdHTTP.Create(nil);
HTTP.HandleRedirects:=True;
Data:=TStringList.Create;
randchisl:=random(1000);
Data.Add('From=' +Form1.otkogo.Text);
Data.Add('To=' +Form1.komu.Text);
Data.Add('Subject='+AnsiToUtf8(Form1.tema.text) +inttostr(randchisl));
Data.Add('Data=' +Form1.Pismo.Lines.Text);
HTTP.Post('http://www.bezmani.ru/services/mail/send.php', Data);
Data.Free;
HTTP.Free;
Synchronize(Synchro);
Form1.Log.Lines.Add(inttostr(otpravleno)+'-ое сообщение отправлено / Осталось: ' +inttostr(nado-otpravleno));
for i := 1 to nado do
Form1.ProgressBar1.Position:=Round(100*otpravleno/nado);
end;
if (otpravleno = 0) or (otpravleno = nado) then
begin
Form1.CoolTrayIcon1.IconIndex:=1;
Form1.CoolTrayIcon1.ShowBalloonHint('Сообщение о работе Spam Sender', 'Отправка спама успешно завершена! ', bitInfo, 11);
Form1.Status.Caption:='Успешно завершено! ';
Form1.ProgressBar1.Position:=Round(100*otpravleno/nado);
Form1.Log.Lines.Add('Отправка спама успешно завершена! ');
Form1.Log.Lines.Add('Отправлено ' +inttostr(otpravleno)+ ' из ' +inttostr(nado));
Synchronize(Enable);
Sleep(5000);
Form1.CoolTrayIcon1.IconIndex:=3;
Form1.Status.Caption:='Ожидание команд';
Form1.ProgressBar1.Position:=0;
end;
if off = true then
begin
Form1.CoolTrayIcon1.IconIndex:=0;
Form1.CoolTrayIcon1.ShowBalloonHint('Сообщение о работе Spam Sender', 'Отправка спама была отменена! ', bitWarning, 11);
Form1.Log.Lines.Add('Отправка спама была приостоновлена пользователем. ');
Form1.Log.Lines.Add('Не отправленных писем: ' +inttostr(nado-otpravleno));
Synchronize(Enable);
Sleep(5000);
Form1.CoolTrayIcon1.IconIndex:=3;
Form1.Status.Caption:='Ожидание команд';
Form1.ProgressBar1.Position:=0;
end;
end;

procedure potok.Synchro;
begin
otpravleno:=otpravleno+1;
end;

procedure potok.Enable;
begin
Form1.Stop.Enabled:=False;
Form1.Start.Enabled:=True;
end;

ошибка: delphi raised exception class eaccessviolation with message
причем при двух потоках нормально, при выше выбивает
не судите за быдлокод, только начинающий
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (424908) 11 лет назад
Подозреваю, что какая-то из используемых библиотек не является thread-safe.
Похожие вопросы