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

Вниз

Передача функции класса как параметра в др. функцию   Найти похожие ветки 

 
learner ©   (2006-06-26 06:55) [0]

Здравствуйте !
Продскажите, пожалуйста, как мне передать ThreadFunct в виде
параметра в др. функцию ?
type
MyClass = class
 private
  function ThreadFunct(Param: Pointer):DWord;
 public
  function TestThread:Boolean;
 end;

{ MyClass }
function MyClass.ThreadFunct(Param: Pointer): DWord;
begin
Beep(500,500);
end;

function MyClass.TestThread: Boolean;
var
pFunct:Pointer;
ThreadID, hThread: DWord;
begin
pFunct:=@ThreadFunct; // Компилятор ругается, переменную требует :((
hThread:= CreateThread(nil,0,pFunct,nil,0,ThreadID);
Result:= hThread <> 0;
end;


 
Юрий Зотов ©   (2006-06-26 07:28) [1]


function ThreadFunct(Param: Pointer): DWord;
begin
 Result := 0;
 with TForm1(Param) do
 begin
   // ...
 end
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 ThreadID: DWord;
begin
 BeginThread(nil, 0, @ThreadFunct, Self, 0, ThreadID)
end;


 
Юрий Зотов ©   (2006-06-26 07:35) [2]

Вдогонку.

Дело в том, что CreateThread (BeginThread) требует не метода класса, а регулярной функции (причем CreateThread требует, чтобы эта функция была еще и stdcall, но при использовании VCL лучше вызывать BeginThread). Различаются они тем, что методы класса имеют еще один, неявный параметр Self (первый в списке).

Обойти это требование можно либо передав в Param экзкмпляр класса (как в примере), либо используя переменную типа TMethod. Первый способ проще.


 
learner ©   (2006-06-26 10:51) [3]

Спасибо большое ! Получилось.



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

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

Наверх




Память: 0.47 MB
Время: 0.03 c
4-1144333437
KorD
2006-04-06 18:23
2006.07.16
Как обратиться к свойству компонента, зная его хендл?


2-1151302164
Gloomer
2006-06-26 10:09
2006.07.16
Список компонент


9-1131908625
Conferno
2005-11-13 22:03
2006.07.16
GLScene - GLPortal и GLFreeForm


15-1150673609
Волф_555
2006-06-19 03:33
2006.07.16
Зарубежные системы заработка денег в Интернет


15-1150315516
Mr tray
2006-06-15 00:05
2006.07.16
ГДЕ достать visual studio какой нибудь, начиная с 6-ого?