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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2010, 01:37   #1
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию Поток прерывается самостоятельно

Только начал осваивать потоки, вставил в свою программу и сразу две проблемы (не часто встречающихся, как я понял из поиска)

Имеем поток:

Код:
type
  Thread = class(TThread)
  private
  protected
    procedure abc;
    procedure def;
    procedure Execute; override;
  end;

implementation

procedure Thread.abc;
var
  R: TRegExp;
begin
  R := TRegExp.Create(nil);
  try
    R.Pattern := '[0-9]+) g([0-9]+)(b*)[^0-9]+([0-9]+)';
    R.IgnoreCase := true;
    R.Global := true;
    .......
  end;
end;

procedure Thread.def;
Var
Doc: IHTMLDocument2;
begin
  Doc:=coHTMLDocument.Create as IHTMLDocument2;
  ......
end;

procedure Thread.Execute;
begin
  abc;
  def;
end;
При вызове в потоке функции abc, поток "дохнет" натыкаясь на строчку
Код:
R.Pattern := '[0-9]+) g([0-9]+)(b*)[^0-9]+([0-9]+)';
Если закомментить функцию abc и заставить сразу выполнять def то "дохнет" на
Код:
Doc:=coHTMLDocument.Create as IHTMLDocument2;
С функцией def вроде разобрался: необходимо перед созданием Doc влепить
Код:
CoInitialize(nil);
А вопрос о патернах в функции abc остается открытым.

Последний раз редактировалось Ferrum26; 28.07.2010 в 01:39.
Ferrum26 вне форума Ответить с цитированием
Старый 28.07.2010, 14:10   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Текст паттерна кривой.
mss вне форума Ответить с цитированием
Старый 28.07.2010, 14:10   #3
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

Проблема решилась как ни странно аналогичным путём: добавлением
Код:
CoInitialize(nil);
в функцию abc. При этом необходимо подключить модулю ActiveX;
До этого поток дох не вызывая ошибок так как в настройках Delphi была убрана галочка "Stop on Delphi Exception"

Цитата:
Текст паттерна кривой.
В тексте пропущена скобка вначале: результат ручного сокращения кода для форума. Недоглядел)

Последний раз редактировалось Stilet; 28.07.2010 в 14:36.
Ferrum26 вне форума Ответить с цитированием
Старый 28.07.2010, 14:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Проблема решилась как ни странно аналогичным путём:
Вполне возможно что TRegExp использует какой-о ActiveX, а ты даже и не подозреваешь о том.
Ибо если пользовать АктивИкс в потоке, поток нужно вначале проинициализировать (CoInitialize(0) ) а в конце снять инициализацию (CoUnInitialize )
Тогда норм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 14:45   #5
Ferrum26
Пользователь
 
Регистрация: 27.04.2010
Сообщений: 16
По умолчанию

Тогда возникает логичное предложение в функцию Execute любого потока добавлять
Код:
CoInitialize(nil)
так, на всякий случай
Ferrum26 вне форума Ответить с цитированием
Старый 28.07.2010, 14:46   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в функцию Execute любого потока добавлять
Нет. Там свои приколы. Лучше добавлять только в те где ActiveX или вообще COM-сервер заюзан.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2010, 15:12   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Интересное чтиво
пыщь
JTG вне форума Ответить с цитированием
Старый 28.07.2010, 15:36   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Интересное чтиво
Действительно. Интереснее некуда:
Цитата:
Forbidden
You don't have permission to access
/cn/showdetail.php?cid=6330 on this server.
Apache/1.3.34 Server at articles.org.ru Port 80
24 - Недопустимый браузер или его свойства
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как самостоятельно изучить Delphi. leo111 Свободное общение 10 26.09.2009 21:32
Стать профессионалом самостоятельно Олвин Свободное общение 10 10.05.2009 20:21
Пытаюсь самостоятельно изучать Паскаль. Возникли вопросы. Студент заочник Паскаль, Turbo Pascal, PascalABC.NET 11 05.04.2009 04:35
с++ по книге Джесса Либерти: Освой самостоятельно с++ за 21 день credo Общие вопросы C/C++ 10 03.11.2008 11:34