4

TThread在我的应用程序中使用,我有很多我想在其中使用的功能。我使用的功能需要时间才能完成,因此在线程中使用它们并不理想。这就是为什么我想知道除了复制和粘贴函数/过程,然后将我的terminated标志(也许注入)到函数中之外,是否还有其他方法。我不想使用TerminateThreadAPI!

一个简短的例子:

procedure MyProcedure;
begin
 // some work that takes time over a few lines of code
 // add/inject terminated flag?!
 // try... finally...
end;

procedure TMyThread.Execute;
begin
 MyProcedure;
 // or copy and paste myprocedure
end;

那么有没有一种有效的方法来编写帮助我使用terminated标志的程序/函数?此外,程序/函数应该是全局的,因此其他函数/程序也可以调用它们。

4

1 回答 1

10

一种选择是在过程调用中引入回调方法。如果回调方法已分配(从线程调用时),则进行调用并采取行动。

从其他地方调用MyProcedure时,将 nil 传递给过程。

Type
  TAbortProc = function : boolean of object;

procedure MyProcedure( AbortProc : TAbortProc);
begin
  //...
  if (Assigned(AbortProc) and AbortProc) then
    Exit;
  //...
end;


function MyThread.AbortOperation : Boolean;
begin
  Result := Terminated;
end;

我避免传递线程引用而不是回调方法的原因是为了从MyProcedure.

于 2013-09-15T16:19:50.067 回答