Текущий архив: 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.44 MB
Время: 0.009 c