Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.06;
Скачать: CL | DM;

Вниз

Как перекрыть абстрактную функцию с другими параметрами?   Найти похожие ветки 

 
ГостьНомер   (2006-06-20 14:22) [0]

Я хочу запускать свою функцию в потоке TMyThread. У функции есть параметры.
Как мне объявить метод Execute моего класса так, чтобы он принимал параметры и мог передать их функции?

Объявляю так:
TMyThread = class (TThread)
  procedure execute (a:real); override;
 end;

И реализация:
procedure TMyThread.execute (a:real);
begin
 MyFunction(a);
end;

Выдает ошибку Declaration of "execute" differs from previous declaration,
что вполне ожидаемо. Без override в runtime получаем Abstract Error.
Пробовал думать. Пробовал добавлять reintroduce, virtual, overload в разных комбинациях.
Не получилось. Как передать параметры, не используя глобальных переменных?


 
tesseract ©   (2006-06-20 14:23) [1]


> Как передать параметры, не используя глобальных переменных?


просто, делам функцию myExecute и вызываем её из execute.

больше никаких проблем.


 
Сергей М. ©   (2006-06-20 14:30) [2]


> Пробовал думать


Плохо пробовал думать.
Или Пробовал плохо думать.
Или не думал вообще.

Виртуальный метод м.б. перекрыт методом с той же декларрацией, что и перекрываемый метод.

Object Pascal, понимаешь ли .. Выше штанов не прыгнешь)


 
oleg__   (2006-06-20 14:44) [3]

TObj1 = class
procedure Execute(a: int); virtual;

TObj2 = class(TObj1)
procedure Execute(s: string; a: int); reintroduce;

TObj2.Execute(s: string; a: int);
begin
 inherited Execute(a);
 // свой код
................


 
icWasya ©   (2006-06-21 09:42) [4]

После таких [3] ответов появится серия вопросов
1) почему у меня поток не запускается
2)почему у меня Access violation
3) ещё что нибудь

Execute у TThread Вы никогда явно не вызываете!
Скорее всего Вам нужно сделать так

Интерфейс:
TMyThread = class (TThread)
 private
   Fa : real;
 public
  procedure execute ; override;
  constructor Create(a:real);
end;

И реализация:
constructor TMyThread.Create(a:real);
begin
  Fa:=a;
  inherited Create;
end;
procedure TMyThread.execute;
begin
MyFunction(Fa);
end;


 
ГостьНомер   (2006-06-22 13:14) [5]

2icWasya Огромное спасибо. Действительно, мы создаем поток create(false), и он сам вызывает execute. Все заработало.


 
Сергей М. ©   (2006-06-22 13:54) [6]


> абстрактную функцию


Разницу между функциональным и процедурным методом объекта ощущаешь ?



Страницы: 1 вся ветка

Текущий архив: 2006.08.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
2-1153316381
DesperadO666
2006-07-19 17:39
2006.08.06
LookUp поля в DBGrid


3-1148961704
ganda
2006-05-30 08:01
2006.08.06
Организация истории изменения таблицы


3-1148986218
Iehbr
2006-05-30 14:50
2006.08.06
Запрос на выборку из дву таблиц


3-1148975665
ksa2002
2006-05-30 11:54
2006.08.06
Текущая дата в InterBase


2-1153295005
Илья С.
2006-07-19 11:43
2006.08.06
Вопрос по автозапуску