gpt4 book ai didi

multithreading - 如何从主线程完全终止并行任务?

转载 作者:行者123 更新时间:2023-12-03 18:30:17 25 4
gpt4 key购买 nike

我如何才能完全从主线程终止此后台线程,即,甚至连OnTerminated中的代码都不会执行?

uses
CodeSiteLogging,
OtlParallel, OtlTaskControl, OtlTask;

procedure TForm2.btnParallelAsyncClick(Sender: TObject);
begin
CodeSite.Send('btnParallelAsyncClick 1');

Parallel.Async(
procedure(const task: IOmniTask)
var
a: Integer;
begin
// executed in background thread:
a := 1 + 1;
Sleep(2000);
CodeSite.Send('Executed in Async Thread', a);

task.Invoke( // used to execute code in main thread
procedure
begin
CodeSite.Send('task.Invoke executed in main thread', a);
end);

Sleep(2000);
CodeSite.Send('Again executed in Async Thread', a);
end,
Parallel.TaskConfig.OnTerminated(
procedure(const task: IOmniTaskControl)
begin
// executed in main thread:
CodeSite.Send('After background thread termination: Executed in Main Thread');
end
)
);

CodeSite.Send('btnParallelAsyncClick 2');
end;

最佳答案

您无法做到这一点(除了杀死线程之外,请不要这样做)。

添加一个全局标志shouldSkipTerminate,在创建任务之前将其设置为false,在终止任务之前将其设置为true并检查是否在OnTerminated中设置了此标志。

关于multithreading - 如何从主线程完全终止并行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41397588/

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