gpt4 book ai didi

multithreading - 如何使用阻塞函数/过程终止线程?

转载 作者:行者123 更新时间:2023-12-03 15:19:59 25 4
gpt4 key购买 nike

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

一个简短的例子:

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;

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

最佳答案

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

从其他地方调用 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 中的线程逻辑(和依赖项)。

关于multithreading - 如何使用阻塞函数/过程终止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18813845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com