gpt4 book ai didi

delphi - 未找到 TThread.Queue 过载

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

这个简单的程序无法编译。 [使用 XE5 和 D10 进行测试。]

program Project10;

{$APPTYPE CONSOLE}

{$R *.res}

uses
System.Classes;

function MakeProc: TThreadProcedure;
begin
Result := procedure begin end;
end;

begin
TThread.Queue(nil, MakeProc);
end.

编译器报告错误

[dcc32 Error] Project10.dpr(16): E2250 There is no overloaded version of 'Queue' that can be called with these arguments

TThread.Queue调用中。

TThread实现了两个Queue重载。

class procedure Queue(const AThread: TThread; AMethod: TThreadMethod); overload; static;
class procedure Queue(AThread: TThread; AThreadProc: TThreadProcedure); overload; static;

我非常确定我的代码应该与第二个重载匹配。

我能找到的唯一解决方法是:

TThread.Queue(nil, procedure begin MakeProc; end);

我做错了什么还是这是一个编译器错误?有比我丑陋的黑客更好的解决方法吗?

最佳答案

编译器显然认为您正在尝试将 MakeProc 本身作为参数传递。您可以通过添加括号来告诉编译器您打算调用该函数,就像函数接受参数一样:

TThread.Queue(nil, MakeProc());

您的解决方法似乎不起作用。它会编译并运行,但 MakeProc 返回的函数永远不会执行。相反,匿名方法wrapping MakeProc 将运行,调用MakeProc,然后丢弃该函数的结果。 (由于该函数的结果在您提供的代码中没有执行任何操作,因此您可能没有注意到其中的差异。)

关于delphi - 未找到 TThread.Queue 过载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613798/

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