Консультация № 150292
12.11.2008, 09:37
0.00 руб.
0 3 1
Привет всем,
подскажите почему не работает CreateThread(nil,0,@MyProcedure,0,0,nil);
или как можно выполнить функцию Copyfile в отдельном потоке?

Обсуждение

Неизвестный
12.11.2008, 15:55
общий
MyProcedure где объявлена? в классе?
Покажите код процедуры, её объявление и вызов.
Неизвестный
12.11.2008, 19:45
общий
это ответ

Здравствуйте, [b]Stdt-tox[/b]!

У меня компилятор ругается только на последний параметр функции, сообщая, что он должен быть var:
Код:
...
implementation

function
MyProcedure: DWORD;
begin
... // CopyFile
Result:= ERROR_SUCCESS;
end;

var

thrres: DWORD;
...
begin
...
// Создаем поток
CreateThread(nil, 0, @MyProcedure, nil, 0, thrres);
...
end;

В Delphi также можно использовать специальный класс:
Код:
...
type
TFileCopier = class(TThread)
protected
procedure
Execute; override;
end;

implementation


{ TFileCopier }

procedure TFileCopier.Execute;
begin
inherited;

... // CopyFile
end;

begin

...
with TFileCopier.Create(False) do
FreeOnTerminate:= True; // Нужно, чтобы класс самоудалился после выполнения
...
end;


Удачи!
Неизвестный
13.11.2008, 11:01
общий
MyProcedure объявлена в ворме...
решение проблемы я уже нашел (немного усилий и...)
вот что я получил:

type potok = class (TThread)
protected
procedure Execute; override;
end;
------------------------------------------
procedure potok.execute;
begin
CopyFile({копируемый файл},{создаваемый},false);
end;
------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
potok.Create(false);
end;
Форма ответа