【问题标题】:What is a thread exit code?什么是线程退出代码?
【发布时间】:2013-09-24 03:15:14
【问题描述】:

调试时输出窗口中的线程退出代码到底是什么?它给了我什么信息?它是有用的还是只是一个不应该打扰我的内部东西?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

是否有某种可能的退出代码列表及其意义?

【问题讨论】:

    标签: c# multithreading debugging exit-code


    【解决方案1】:

    实际上似乎没有很多关于这个主题的解释,但退出代码应该用于指示线程如何退出,0 往往意味着它安全退出,而任何事情else 往往意味着它没有按预期退出。但是这个退出代码可以自己在代码中设置,完全忽略这一点。

    我能找到的对更多信息有用的最近链接是this

    引用以上链接:

    无论退出的方法是什么,从进程或线程返回的整数必须是 0-255(8 位)之间的值。零值表示成功,而非零值表示失败。尽管您可以尝试返回任何整数值作为退出代码,但只有整数的最低字节作为退出代码的一部分从您的进程或线程返回。操作系统使用高阶字节来传达有关进程的特殊信息。退出代码在批处理/shell 程序中非常有用,这些程序根据一个程序的成功或失败有条件地执行其他程序。


    来自GetEXitCodeThread 的文档

    重要 GetExitCodeThread 函数仅在线程终止后返回由应用程序定义的有效错误代码。因此,应用程序不应使用 STILL_ACTIVE (259) 作为错误代码。 如果线程返回 STILL_ACTIVE (259) 作为错误代码,测试此值的应用程序可能会将其解释为表示该线程仍在运行,并在该线程之后继续测试该线程是否完成已终止,这可能会使应用程序陷入无限循环。


    我对这一切的理解是,如果您在自己的应用程序中使用线程为您自己的应用程序,退出代码并不重要。如果您同时运行几个相互依赖的线程,则可能存在例外。如果需要外部源读取此错误代码,那么您可以设置它以让其他应用程序知道您的线程的状态。

    【讨论】:

    • 有没有办法从输出窗口中去掉它?
    • @ArneEvertsson - 如果你进入工具 |选项...在“Debugging\Output Window”区域下,有一个“Thread Exit Messages”(On|Off)设置。
    • 这可能意味着您正在同步应用程序主线程中使用异步方法,而不是等待它们完成。处理此问题的最简单方法是在由另一个方法启动并返回的任务上调用 Wait(),如本示例所示:asp.net/web-api/overview/advanced/…RunAsync().Wait();
    • @BronDavies 线程池线程即使在调用 Wait() 后也会以错误代码 259 退出。这是我的代码:static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); } 问题是,任务由线程池线程执行,并且基于线程池的启发式方法,即使您的任务完成,它也可能不会终止线程。该线程只是返回到等待分配下一个任务的线程池。这就是为什么退出代码 STILL_ACTIVE (259) 在这里听起来如此直观的原因。
    • 链接中的文章有误。不要求线程退出代码(或进程退出代码,就此而言)只有一个字节。
    【解决方案2】:

    正如 Sayse 所说,退出代码259 (0x103) 具有特殊含义,在这种情况下,被调试的进程仍在运行。

    我在调试 Web 服务时经常看到这一点,因为线程在执行每个 Web 服务调用后会继续运行(因为它仍在侦听进一步的调用)。

    【讨论】:

    • 更多信息.. 通常线程池拥有的任何线程都将以 259 退出。请参阅:stackoverflow.com/questions/21632584/…
    • 我想知道这意味着什么,而您的回答正是我在运行 C# 控制台应用程序时所看到的。谢谢!
    【解决方案3】:

    发生在我身上的是我的解决方案中有多个项目。我的意思是调试项目 1,但是,项目 2 被设置为默认启动项目。我解决了这个问题,右键单击项目并选择“设置为启动项目”,然后运行调试就可以了。

    【讨论】:

    • 我没有在输出窗口中看到调试消息作为问题。我只是好奇它们是什么,而不是如何摆脱它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多