Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 21:54   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Class EAssertionFailed

Здравствуйте ! Я использую компоненты HTTP и SSL, что бы заполнить веб форму на сайте. Заполнение и получение капчи происходит через поток, что бы приложение не зависало. Загрузка капчи происходит на второй форме, которая открывается после заполнения данных и по нажатию клавиши. Так вот, когда я получаю я нажимаю кнопку получения капчи, открывается вторая форма и поток начинает свою работу (поток где обрабатывается запрос получения капчи), если поток еще выполняется и я вдруг закрыл вторую форму, а потом опять нажимаю на кнопку получения капчи, открывается вторая форма и вываливается ошибка :

Project Box.Exe Raised Exception Class EAssertionFailed With Message 'Assertion Failure (D:\Indy 10\Lib\Protocols\IdSSLOpenSSL.Pas, Line 1568)'

Я так понял, что проблема в том, что поток не завершается после того как я закрываю вторую форму, а потом когда я вновь гружу этот же поток который выполняется происходит ошибка . . . А может и еще в чем-то проблема, помогите пожалуйста
RIO вне форума Ответить с цитированием
Старый 10.10.2009, 23:00   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

напиши код события закрытия формы?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.10.2009, 23:07   #3
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Вот именного, что его нет В этом событии ничего не прописано . . . Я же и имею ввиду, что или в событии когда форма закрывается нужно как-то завершать процесс и освобождать память, или проблема в чем-то в другом, но как мне кажется, проблема здесь не в потоке, потому-что когда я делал такую похожею программу где не было SSL, так с ней можно было делать, что захочешь, и закрывал форму и опять открывал и все работало, а здесь нет
RIO вне форума Ответить с цитированием
Старый 10.10.2009, 23:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

поток нужно останавливать.
причем корректно.(в том числе внутренние процессы этого потока)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.10.2009, 00:01   #5
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

http://programmersforum.ru/showthrea...498#post361498
RIO вне форума Ответить с цитированием
Старый 11.10.2009, 00:09   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почти.
нужно дисконект ИнДи делать еще же...в общем не все так прозрачно як кажется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.10.2009, 00:12   #7
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

То есть, по закрытию окна вставить :

Код:
if not Go.Terminated then
begin
  Go.Terminate
  Go.FreeOnTerminate := False;
  HTTP.Disconnect; 
end;
Или что-то опустил ?
RIO вне форума Ответить с цитированием
Старый 11.10.2009, 00:14   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

покажите полный код потока.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.10.2009, 00:18   #9
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Код:
unit Captcha;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type
  TCaptchaBox = class(TForm)
    GroupBox1: TGroupBox;
    CancelButton: TSpeedButton;
    CaptchaEdit: TEdit;
    Image2: TImage;
    Label11: TLabel;
    Label12: TLabel;
    Panel1: TPanel;
    Image1: TImage;
    RegisterButton: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
  public
  end;

  TGetCaptcha = class(TThread)
  private
  protected
    procedure Execute; override;
  end;

var
  CaptchaBox: TCaptchaBox;
  GetCaptcha: TGetCaptcha;

implementation

uses Main, Result;

{$R *.dfm}

procedure TCaptchaBox.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
end;

procedure TCaptchaBox.FormShow(Sender: TObject);
begin
  GetCaptcha := TGetCaptcha.Create(True);
  GetCaptcha.FreeOnTerminate := True;
  GetCaptcha.Priority := TPNormal;
  GetCaptcha.Resume;
end;

procedure TGetCaptcha.Execute;
begin
  Box.CreateUIN;
  CaptchaBox.Progress.Visible := False;
  CaptchaBox.Progress.Enabled := False;
  CaptchaBox.Progress.Position := 0;
end;

end.

Последний раз редактировалось RIO; 11.10.2009 в 00:20.
RIO вне форума Ответить с цитированием
Старый 11.10.2009, 00:29   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

стоп, так у вас на все потоки один HTTP?
понятно что возможен конфликт.
ну в таком случае код почти верен.
только сначало дисконект, поток Terminate(а лучше паузу поток дисконект, потом наф его)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
class solomon123456789 Общие вопросы C/C++ 5 03.08.2009 22:29
class string!!!! artush1984 Общие вопросы C/C++ 6 22.05.2009 15:55
C# Class Listbox bondik Общие вопросы .NET 2 02.05.2009 23:02
class zzzzz Общие вопросы по Java, Java SE, Kotlin 2 03.04.2008 01:14