gpt4 book ai didi

multithreading - CodeSite 类别和线程

转载 作者:行者123 更新时间:2023-12-03 18:19:33 25 4
gpt4 key购买 nike

我正在试验捆绑到 Delphi XE 中的 CodeSite Express。我想像这样使用 Category 功能:

CodeSite.Category := 'SomeCategory';
CodeSite.EnterMethod ('SomeMethod');
try
DoSomething;
finally
CodeSite.ExitMethod ('SomeMethod');
end;

问题是,如果 DoSomething 还包含设置类别的日志记录代码,那么 ExitMethod 将以不同的类别结束,并会破坏整个层次结构在查看器中。

如果线程启动,情况会更糟:设置 Category 然后调用日志命令显然不是原子操作,因此使用 CodeSite 日志记录的两个线程不能真正使用 Category。至少在我的日志中是这样的。我原以为 Category 是线程本地的,但它似乎不是。

在嵌套日志记录和线程上下文中处理类别的正确模式是什么?

谢谢!

最佳答案

创建另一个 Codesite 对象,可能每个线程一个,并设置该对象类别。

有多种方法可以做到这一点。你可以有一个特定的对象,比如 MyThreadCodesite : TCodeSite;您写入的对象,或者您可以为称为“Codesite”的线程定义一个属性并引用该对象。因此你的线程代码看起来完全一样,因为它说“Codesite.Send('hello');”但引用线程的对象。

完成后效果很好。我在一个项目中有大约 10 个 TCodesite 对象,着色可以让您轻松查看系统的哪一部分在做什么。

关于multithreading - CodeSite 类别和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686941/

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