gpt4 book ai didi

ios - TTask[n] EThreadNameException

转载 作者:行者123 更新时间:2023-11-28 19:40:47 25 4
gpt4 key购买 nike

专家,请看下面的代码片段:

var
aAllTasks : Array [0..1] of ITask //global private var

Procedure SetImage();
begin

//..
//.. Get a URL of an image stored on a server
//..

aAllTasks[0] := TTask.Run(
Procedure
begin
// Download the Image and display the image
end);

aAllTasks[1] := TTask.Run(
Procedure
begin
// Get the rating of the image from a REST server
end);

end;

当调试器命中时

      aAllTasks[1] := TTask.Run(...);

我明白了

第一次机会异常 $001A30B5。带有消息“”的异常类 EThreadNameException。进程 APPNAME (126391)

它抛出异常但它似乎并没有使应用程序崩溃

这只会在调试/运行 iOS 应用程序时发生
iOS 9.2
RS 10 西雅图(更新 1)
PA 服务器 17.0(带有修补程序..V 8.0.1.52)
Xcode 版本 7.2 (7C68)

什么会导致这种情况,我该如何解决?

最佳答案

您的代码调用 TThread.NameThreadForDebugging。看起来像这样:

class procedure TThread.NameThreadForDebugging(AThreadName: string; AThreadID: TThreadID);
{$IF Defined(MSWINDOWS)}
.... // windows specific code removed
{$ELSE MSWINDOWS}
const
cExceptionMessage = 'Type=$1000,Name=%s,ThreadID=%d,Flags=0';
EMBDBKPRESENTNAME = 'EMB_DBK_PRESENT';
{$IF Defined(MACOS)}
OLDEMBDBKPRESENTNAME = 'EMB_MACOSX_DBK_PRESENT';
{$ENDIF}
begin
{$IF Defined(MACOS)}
if (getenv(EMBDBKPRESENTNAME) <> nil) or (getenv(OLDEMBDBKPRESENTNAME) <> nil) then
{$ELSEIF Defined(ANDROID)}
if (System.DebugHook <> 0) or (getenv(EMBDBKPRESENTNAME) <> nil) then
{$ELSE}
if (getenv(EMBDBKPRESENTNAME) <> nil) then
{$ENDIF}
begin
try
raise EThreadNameException.Create(
Format(cExceptionMessage, [AThreadName, AThreadID]));
except
end;
end;
end;
{$ENDIF !MSWINDOWS}

当你想给你的线程一个名字时调用这个函数。现在,线程对象没有名称。因此,当您为线程命名时,它仅用于调试目的。调试器会跟踪您提供的名称,并将它们与线程 ID 相关联。然后,当调试器显示有关线程的信息时,它可以从 ID 中查找名称并将其显示给您。但这纯粹是一种调试器机制,因为操作系统不支持线程名称。

那么,您如何向调试器发出您希望为线程命名的信号。好吧,你抛出一个特定的异常。调试器知道异常并获得第一个处理异常的机会。调试器接收异常文本中的名称和线程 ID,并记下该信息。

请注意,异常会立即被吞噬,因此不会中断程序的流程。

所以,这个异常被抛出,由调试器处理,是正常的,不会影响程序的行为。奇怪的是调试器中断了那个异常。默认情况下,我希望调试器忽略该异常。

OSX 的旧 QC 报告 ( QC#105310 ) 准确描述了您观察到的行为。该问题已关闭并标记为已在 XE7 中修复。也许这个问题已经重新浮出水面,或者它可能从未针对移动平台得到解决。我建议您向 Quality Portal 提交错误报告。

关于ios - TTask[n] EThreadNameException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416259/

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