gpt4 book ai didi

c# - 从 ProcessThread 到托管线程

转载 作者:太空狗 更新时间:2023-10-29 17:45:32 28 4
gpt4 key购买 nike

在我们无法重现的生产环境中,我们会定期关闭 Windows 服务。可能要过几个月才会再次发生。

我正在进行一些诊断以尝试帮助解决这个问题,我正在关注的一件事是在我们开始关闭应用程序后向系统线程池添加一个持续 60 秒的事件。我们的应用程序应在最多 10 秒内干净关闭。

在这种情况下,我想在事件日志中追踪进程剩余的运行线程。

我可以使用 System.Diagnostics.Process.GetCurrentProcess.Threads 获取正在运行的线程。这些线程对象具有 native Win32 线程 ID 等。

我想知道是否有任何方法可以从这些线程 ID 返回到它们在当前进程中代表的任何托管线程。我尝试这样做的原因是因为对于我们的线程池和我们产生的其他线程,我们给出了代表它们目的的名称,这真的有助于取回它们。

最佳答案

这是不可能的,原因如下。 Quote from MSDN :

An operating-system ThreadId has no fixed relationship to a managed thread, because an unmanaged host can control the relationship between managed and unmanaged threads. Specifically, a sophisticated host can use the CLR Hosting API to schedule many managed threads against the same operating system thread, or to move a managed thread between different operating system threads.

因此托管线程和操作系统线程之间没有一对一的映射。

那么现在问题就变成了,如何获取当前进程中所有正在运行的托管线程的列表呢?很遗憾,我不知道答案。

关于c# - 从 ProcessThread 到托管线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749541/

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