gpt4 book ai didi

Delphi - 使用并行编程库中的 IFuture 读取大文件

转载 作者:行者123 更新时间:2023-12-02 23:41:31 24 4
gpt4 key购买 nike

我正在阅读一些大型(相当)的 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/

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