Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.12.2010, 14:28
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию Как работают с переменными в потоках?

А как работают с переменными в потоках? Допустим многопоточный постер, для постинга нужна инфа из тела страницы. Обычно - выдираю её в переменную и потом использую. Но ведь при мультипоточном постинге нужно столько таких переменных как и количество потоков? Или нет?
Ответить с цитированием
  #2  
Старый 11.12.2010, 14:31
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Код:
type
  TPoster = class(TThread)
  private
    Post: string;
  protected
    procedure Execute; override;
  end;
Ответить с цитированием
  #3  
Старый 11.12.2010, 14:54
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Спасибо!
Ответить с цитированием
  #4  
Старый 11.12.2010, 15:06
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну если потоки только читают значение из переменной, то можно обойтись и одной. а если еще и изменяют, то есть несколько способов синхронизации. в данном случае самый простой использовать критическую секцию, имхо.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 11.12.2010, 18:05
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Хорошо. А вот такой вопрос. Есть несколько функций. Как их заставить работать в потоке?


Пробую так:
Код:
 TNewThread = class(TThread)
  private
...

    protected
    procedure Execute; override;
  public
    procedure Sync;
    function ParseSid(s:string):string;
    function ParseLink(s:string):string;
    function ParseReload(s:string):string;
    constructor Create(CreateSuspended: Boolean);
  end;

Выдаёт ошибку:
Incompatible types: 'TComponent' and 'TNewThread'

Ошибки возникают на строках:
Reg := TRegExp.Create(Self);
Ответить с цитированием
  #6  
Старый 11.12.2010, 19:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

-вызывать их в методе Execute
-смотреть конструктор класса TRegExp. могу лишь предположить (TRegExp не знаю такого) что:
TRegExp = class(TComponent)
в то время как:
TThread = class(TObject)
ну и тогда:
Reg := TRegExp.Create(Form1);
ну или как там
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 11.12.2010, 19:14
MrDiG MrDiG вне форума
Начинающий
 
Регистрация: 05.10.2010
Сообщения: 112
Репутация: 1227
По умолчанию

Цитата:
Сообщение от NumLock
-вызывать их в методе Execute
-смотреть конструктор класса TRegExp. могу лишь предположить (TRegExp не знаю такого) что:
TRegExp = class(TComponent)
в то время как:
TThread = class(TObject)
ну и тогда:
Reg := TRegExp.Create(Form1);
ну или как там
Спасибо! Помогло Reg := TRegExp.Create(Form1). Скомпилировалось, но во время работы идёт ошибка First chance exception at $7C812AFB. Exception class EOleSysError with message 'Не был произведен вызов CoInitialize'. Process Project1.exe (3136)

TRegExp - это для регулярок. Находиться в VBScript_RegExp_55_TLB
Код:
TRegExpProperties = class(TPersistent)
  private
    FServer:    TRegExp;
    function    GetDefaultInterface: IRegExp2;
    constructor Create(AServer: TRegExp);
  protected
    function Get_Pattern: WideString;
    procedure Set_Pattern(const pPattern: WideString);
    function Get_IgnoreCase: WordBool;
    procedure Set_IgnoreCase(pIgnoreCase: WordBool);
    function Get_Global: WordBool;
    procedure Set_Global(pGlobal: WordBool);
    function Get_Multiline: WordBool;
    procedure Set_Multiline(pMultiline: WordBool);
  public
    property DefaultInterface: IRegExp2 read GetDefaultInterface;
  published
    property Pattern: WideString read Get_Pattern write Set_Pattern;
    property IgnoreCase: WordBool read Get_IgnoreCase write Set_IgnoreCase;
    property Global: WordBool read Get_Global write Set_Global;
    property Multiline: WordBool read Get_Multiline write Set_Multiline;
  end;



UPD. Разобрался. CoInitialize(nil); в начало Execute. ActiveX в Uses

Последний раз редактировалось MrDiG, 11.12.2010 в 19:28.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter