【发布时间】:2010-11-10 09:06:22
【问题描述】:
我承认,我从 Stack Overflow 中学到了很多东西。
在on this question 之后,我了解了如何制作一个返回整数的解耦后台线程类,我现在想知道如何使其更通用。
但是我需要如何改变它(“整数”是硬编码的)。我使用一个很长的类名只是为了演示:
type
TSyncMethod = Procedure(ThreadResult: integer) of Object;
TBackgroundThreadWithIntegerResult = class(TThread)
private
FResult: integer;
到通用的对应物?
【问题讨论】:
-
小记:这是糟糕的设计。为什么仅仅因为你的工作代码的结果类型发生了变化,你就想创建一个新的线程类?
TThread的使用在这里是一个实现细节,所以你应该选择组合而不是继承。创建一个计算结果的通用类,并使其可以在调用线程、专用线程或池中的线程中执行。 -
当然 TBackGroundThreadWithIntegerResult 不是最好的解决方案,这就是我考虑使用泛型的原因。这样,我不需要为每种类型的结果添加 TThread 的子类。事实是,结果总是与数据库查询相关,有时它可以返回一个整数,有时是一个字符串,有时是一个 TDataSet。所以线程所做的只是执行一个查询并将一个整数、一个字符串或一个 TDataSet 保存到结果中。无论如何,如何根据通用 T 类型分配结果我不清楚,这就是我对 Jens Mühlenhoff 的回答的评论。
-
@mghie 好的,但是由于我需要返回一个通用值,我该如何处理线程内的通用计算类?
标签: multithreading delphi generics delphi-2009