作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读一些大型(相当)的 Excel 文件,该文件需要“很长时间”才能加载。我可以在真正需要访问它之前加载它。所以我认为这对于并行编程库中的 IFuture 来说是一个很好的用途。但我不确定如何去做,因为所有“ future ”示例仅涵盖简单类型,例如字符串、整数等。
这是非并行代码:
xls := TsmXLSFile.Create;
xls.Open(s);
其中“xls”是 Excel 对象,“s”是内存流。
“ future ”会如何解决这个问题?我可以将 xls 声明为...
xls := IFuture<TsmXLSFile>
这是正确的吗?如果是,那么我是否需要像普通的 TsmXLSFile 一样释放它,因为它现在是一个接口(interface)?
史蒂夫
最佳答案
声明一个字段来获取该接口(interface):
FXlsFuture: IFuture<TsmXLSFile>;
添加一种方法来创建 future ,另一种方法来处理加载的文件:
function TForm90.CreateXlsFuture: IFuture<TsmXLSFile>;
begin
{ starts loading }
Result := TTask.Future<TsmXLSFile>(
function: TsmXLSFile
begin
result := TsmXLSFile.Create;
result.Open(s);
end);
end;
procedure TForm90.HandleXlsFuture(AFuture: IFuture<TsmXLSFile>);
var
xsl: TsmXLSFile;
begin
xsl := AFuture.Value; { eventually blocks until the file is loaded }
{ do something with the file }
xsl.Free;
end;
此外,您还可以查询 future 的Status
来检查文件是否已经加载以避免阻塞。
关于Delphi - 使用并行编程库中的 IFuture 读取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053817/
我有一组任务来执行它们在一个数组中。我想遍历数组并为每个数组启动一个任务。 下面的例子很简单(计算平方)来说明这个问题。 program FutureSquares; {$APPTYPE CONSOL
我正在阅读一些大型(相当)的 Excel 文件,该文件需要“很长时间”才能加载。我可以在真正需要访问它之前加载它。所以我认为这对于并行编程库中的 IFuture 来说是一个很好的用途。但我不确定如何去
我是一名优秀的程序员,十分优秀!