Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
ГостьНомер   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
2-1153329403
db_noob
2006-07-19 21:16
2006.08.06
БД + дерево


2-1153232666
nickov
2006-07-18 18:24
2006.08.06
иконки из ресурса


2-1152841836
Toy
2006-07-14 05:50
2006.08.06
DBText и DBComboBox


15-1152603369
Ketmar
2006-07-11 11:36
2006.08.06
кто знает, где спулер принтера хранит свои задания?


2-1153396795
RobinBad
2006-07-20 15:59
2006.08.06
Чтение из файла по строкам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский