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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 16:44   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Вопрос Можно ли использовать TNotifyEvent через property, в TThread?

Доброго времени суток!

Можно ли так делать?

Код:
unit CheckUnit;

interface

uses
{$IFDEF VER260}System.Classes{$ELSE}Classes{$ENDIF},
  httpsend;

type
  TResultNotify = procedure(Sender: TObject; var aResult: Boolean) of object;
  TCheckThread = class(TThread)
  private
    fURL: string;
    fResult: Boolean;
    fNotify: TResultNotify;
    fHTTP: THTTPSend;
    procedure SetNotify(aVal: Boolean);
  protected
    procedure Execute; override;
  public
    property OnResult: TResultNotify read fNotify write fNotify;
    constructor Create(const aURL: string = ''); overload;
    destructor Destroy; override;
  end;

implementation

{ TCheckThread }

constructor TCheckThread.Create(const aURL: string);
begin
  inherited Create(True);
  fHTTP := THTTPSend.Create;
  fHTTP.UserAgent :=
    'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.00';
  fURL := aURL;
end;

destructor TCheckThread.Destroy;
begin
  fHTTP.Free;
  inherited;
end;

procedure TCheckThread.Execute;
var
  bResult: Boolean;
begin
  NameThreadForDebugging('CheckThread');
  inherited FreeOnTerminate := True;
  SetNotify(bResult);
end;

procedure TCheckThread.SetNotify(aVal: Boolean);
begin
  if Assigned(fNotify) then
    fNotify(self, aVal);
end;

end.
Данный трэд создается в VCL и там же тыкается указатель на метод TResultNotify. Мне кажется, поток лезет в VCL без синхронизации..
Как синхронизировать подобные вещи, и можно ли так, вообще делать?
Человек_Борща вне форума Ответить с цитированием
Старый 26.06.2012, 17:12   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Мне кажется, поток лезет в VCL без синхронизации
Правильно кажется. Просто используется вызов внешней процедуры, заданной через свойство.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.06.2012, 17:18   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

а как быть? Мне допустим нужно вызвать в VCL процедуру с параметрами....
Человек_Борща вне форума Ответить с цитированием
Старый 26.06.2012, 18:45   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а как быть?
Как и обычно - синхронизация облюбованным способом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.06.2012, 19:57   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Спасибо. Разобрался с проблемой.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Notice: Trying to get property of non-object. для property of static property Jakethefish PHP 8 16.08.2011 16:09
можно ли использовать принтер VAnj2607 Помощь студентам 3 05.05.2011 16:40
Реализовать Tthread через interface cosmic_call Общие вопросы Delphi 4 20.02.2011 22:36
Sorry, а можно использовать тэги? BaronTreep О форуме и сайтах клуба 27 18.07.2009 13:25
IF - можно ил и как использовать? iankov SQL, базы данных 6 13.06.2009 12:13