![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В отдельном потоке
Doom-2 © (2007-05-10 16:53:00)Запускаю несколько процедур подряд в отдельном потоке так:
RunProc([DeleteDirTree('F:\NEW'),
DeleteDirTree('F:\TEMP'),
ExecAndWait(C:\game.exe, SW_SHOWNORMAL),
CopyFiles( Handle, dir, 'C:\Temp', True, True ),
CopyFiles( Handle, dir, 'C:\Temp', True, True ),
CopyFiles( Handle, dir, 'C:\Temp', True, True )],
Otchet);
Использую Unit:
unit ThreadUnit;
interface
uses
Classes;
type
TCallArray=array of TThreadMethod;
TProcCaller = class(TThread)
private
{ Private declarations }
CallBackProc:TThreadMethod;
Procs:TCallArray;
protected
procedure Execute; override;
constructor Create(const AProcs:TCallArray;ACallBackProc:TThreadMethod);
end;
procedure RunProc(const AProcs:TCallArray;ACallBackProc:TThreadMethod=nil);
implementation
procedure RunProc(const AProcs:TCallArray;ACallBackProc:TThreadMethod=nil);
begin
TProcCaller.Create(AProcs,ACallBackProc);
end;
{ TProcCaller }
constructor TProcCaller.Create(const AProcs:TCallArray;ACallBackProc:TThreadMethod);
begin
inherited Create(true);
Procs:=AProcs;
CallBackProc:=ACallBackProc;
Resume;
end;
procedure TProcCaller.Execute;
var i:integer;
begin
for i:=0 to Length(Procs) do begin
Procs[i];
end;
if Assigned(CallBackProc) then Synchronize(CallBackProc);
Free;
end;
end.
Как исправить ошибки:
[Ошибка] Unit1.pas(437): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Boolean'
[Ошибка] Unit1.pas(438): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
[Ошибка] Unit1.pas(439): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
[Ошибка] Unit1.pas(440): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
Doom-2 (2007-05-11 10:34:00) [21]clickmaker © (10.05.07 17:23) [7]
К сожалению, не помогло!
Тут всётаки проблема видимо:
ExecAndWait(C:\game.exe, SW_SHOWNORMAL): boolean;
На те функции, которые без "Result"-а Delphi не ругается
Может, разгадка где-то тут:
iXT © (10.05.07 17:07) [5]
что возвращают функции в 437-400 ??????
...
Сдается мне что в качестве параметров нужен указатель, а ты передаешь Bool, Int, Int, Int!
Тупо убрать ): boolean;нельзя, - он используется в коде самой функции!
Что же тут можно сделать?
iXT (2007-05-10 17:33:00) [22]"Вы же так не убьетесь"
clickmaker (2007-05-10 17:23:00) [23]CopyFilesParams= VarArrayOf([Handle, dir, 'C:\Temp', True, True]);
RunProc([CopyFiles, ... ], VarArrayOf([CopyFilesParams, ...]))
Doom-2 (2007-05-10 17:09:00) [24]clickmaker © (10.05.07 17:05) [4]
Подскажи, пожалуйста - как это сделать на примере одной из функций!
iXT (2007-05-10 17:07:00) [25]Ну и.......
RunProc( - какие параметры
и
что возвращают функции в 437-400 ??????
[Ошибка] Unit1.pas(437): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Boolean'
[Ошибка] Unit1.pas(438): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
[Ошибка] Unit1.pas(439): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
[Ошибка] Unit1.pas(440): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'
Сдается мне что в качестве параметров нужен указатель, а ты передаешь Bool, Int, Int, Int
clickmaker (2007-05-10 17:05:00) [26]в RunProc ты фактически передаешь результаты выполнения функций. Если требуется именно запуск, то указатель на функцию передавай отдельно, ее параметры - отдельно
Doom-2 (2007-05-10 16:59:00) [27]RunProc([DeleteDirTree('F:\NEW'),
DeleteDirTree('F:\TEMP'),
ExecAndWait(C:\game.exe, SW_SHOWNORMAL), - 437
CopyFiles( Handle, dir, 'C:\Temp', True, True ), - 438
CopyFiles( Handle, dir, 'C:\Temp', True, True ), - 439
CopyFiles( Handle, dir, 'C:\Temp', True, True )], - 440
Otchet);
iXT (2007-05-10 16:57:00) [28]Они в 437 - 440 строках :)
Doom-2 (2007-05-10 16:56:00) [29]Я понимаю, что это из-за:
например, ExecAndWait(C:\game.exe, SW_SHOWNORMAL): boolean;
Неужели придётся переделывать весь код?!