Ed.*_*d.C 4 delphi multithreading callback delphi-2010
我正在尝试在Delphi中构建一个通用工作线程,我可以将一个函数/过程(无关紧要)作为参数传递并让它执行.
我的猜测是在TThread类中添加一个字段并从中调用它TThread.Execute.
所以线程外的代码将是:
MyThread := TWorkerThread.Create(True);
Mythread.CallBackF := @Foo;
try
MyThread.Resume;
except
MyThread.Free;
end;
如何保持一个参考 @foo的TWorkerThread,并从内部调用它Execute?
我不会假装自己是线程专家,但我认为这样做可以:
interface
type
TProcRef = reference to procedure;
TWorkerThread = class(TThread)
public
proc: TProcRef;
procedure Execute; override;
class procedure RunInThread(AProc: TProcRef);
end;
implementation
procedure TWorkerThread.Execute;
begin
inherited;
proc;
end;
class procedure TWorkerThread.RunInThread(AProc: TProcRef);
begin
with TWorkerThread.Create(true) do
begin
FreeOnTerminate := true;
proc := AProc;
Resume;
end;
end;
Run Code Online (Sandbox Code Playgroud)
然后,如果你有任何程序,比如
procedure P;
begin
while true do
begin
sleep(1000);
beep;
end;
end;
Run Code Online (Sandbox Code Playgroud)
你可以做
procedure TForm1.Button1Click(Sender: TObject);
begin
TWorkerThread.RunInThread(P);
end;
Run Code Online (Sandbox Code Playgroud)
你甚至可以做
TWorkerThread.RunInThread(procedure begin while true do begin sleep(1000); beep; end; end);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |