Главная страница
    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.45 MB
Время: 0.012 c
2-1151795588
SUN_ALF
2006-07-02 03:13
2006.08.06
Перехват и остановка только что запущенного процесса


3-1149150236
Dust
2006-06-01 12:23
2006.08.06
Абра-кадабра в отчёте, FR, Arial (cp Cyrilic), WinXP Rus


2-1153305041
VitGun
2006-07-19 14:30
2006.08.06
Shell Extension. Как?


10-1122560284
GekaNaz
2005-07-28 18:18
2006.08.06
НЕ могу вставить в Excel таблицу гиперссылку из Delphi


2-1152910896
Mr tray
2006-07-15 01:01
2006.08.06
Функция, ожидающая поступления данных (как showmodal)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский