delphi - 有没有办法查询关键部分有多少 block ?

标签 delphi

我有一个利用TCriticalSection的多线程Delphi应用程序。线程数定期开始变得非常高。最终,大约 30 秒后,所有线程都开始处理。我怀疑封装在关键部分中的代码有时需要比平时更长的时间来处理。因此将“ block ”放在所有其他线程上。

有没有办法查询 CritialSections 并找出它们当前阻塞了多少线程?

try
  ReportCriticalSection.Acquire;
  ........
finally
  ReportCriticalSection.Release;
end;

最佳答案

检查 TRtlCriticalSection.LockCount 字段。在TCriticalSection中,RTL结构是一个 protected 字段。

Matt Pietrek 和 Russ Osterlund 几年前在 MSDN 杂志 上发表了一篇文章,其中包含对所有字段含义的描述。仅将它们用于调试,而不用于业务逻辑。

Break Free of Code Deadlocks in Critical Sections Under Windows

关于delphi - 有没有办法查询关键部分有多少 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119596/

相关文章:

c++ - 如何将 C++ _tcscpy、_tcscat 转换为 Delphi?

windows - 为什么自定义光标图像显示不正确?

delphi - Delphi主从网格组件

algorithm - 哪种算法适合这里?遍历一系列相互连接的节点,以最少的重复覆盖它们

multithreading - 尝试通过 tcp/ip 发送文件时表单卡住,Delphi 2010

delphi - 设置 Canvas.LineTo 的线端样式

javascript - 将 Javascript 代码转换为 Delphi

Delphi - 线程中的 WndProc() 从未被调用

delphi - Delphi 有跟踪音乐库吗?

delphi - Delphi XE4 中是否可以更改应用程序短标题而不使其与项目 dpr 名称相同?