【发布时间】:2019-08-05 22:23:26
【问题描述】:
在下面的示例中(来自 Embarcadero 的手册),MyValue 将在大约 3 秒后被检索。但是,主 gui 线程会被 MyValue := FutureObject.Value; 阻塞。 call 将等待结果。 如果 Future 代码需要很长时间,比如说 30 秒,我猜 Windows 会在程序标题中显示“...没有响应”。 那么当它阻塞主gui线程时,这样做的目的是什么? 有没有其他方法可以在不阻塞主 gui 线程的情况下获得结果?
FutureObject := TTask.Future<Integer>(function: Integer
begin
Sleep(3000);
Result := 16;
end);
// …
MyValue := FutureObject.Value;
【问题讨论】:
-
如果您需要知道,那么您需要等待。也许您正在寻找一种事件驱动的方法。一些上下文会有所帮助。我建议你买一本关于并行处理的书并学习这些概念。不需要基于delphi,其他oop语言的概念是一样的。