gpt4 book ai didi

multithreading - 如何使用 OmniThreadLibrary 访问线程变量?

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

这似乎是一项简单的任务,我只是不知道从哪种方式开始使用 OmniThreadLibrary:

我创建了一个在后台进行一些处理的任务。结果存储在任务类的字段中,并不断填充新值。

现在主线程想要读取这些字段并时不时地显示它们的值。
因此,它需要访问这些字段并确保它们在这些时刻没有被写入(同步)。

如何使用 OmniThreadLibrary 来完成此操作?

最佳答案

OTL 中没有对所有者/线程数据共享的直接支持,因为我所有的多线程经验告诉我,这始终是一件坏事。 (同意,有时这是唯一的解决方案,但仍然是一件坏事。)

您应该遵循第二个 mghie 的建议 - 创建一个(可选地基于接口(interface)的)对象并将该对象(或其接口(interface))传递给线程。像这样的事情:

sharedData := TSharedData.Create;
task := CreateTask(worker).SetParameter('shared', sharedData).Run;

worker :

sharedData := Task.Param['shared'].AsObject as TSharedData;

解决该问题的另一种方法是每当用户按下 UpdateNow 按钮时向任务发送“请发送更新”消息。然后,该任务将使用包含当前状态的对象进行响应。但是,如果任务执行冗长的不间断计算,则此解决方案并不真正合适,并且共享状态方法效果更好。

关于multithreading - 如何使用 OmniThreadLibrary 访问线程变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659520/

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