什么是线程退出代码?

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

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

有没有什么可能的出口密码以及它的重要性?

133299 次浏览

实际上似乎没有很多关于这个问题的解释,但是退出代码应该是用来给出线程如何退出的指示,0倾向于意味着它安全退出,而其他任何东西倾向于意味着它没有按照预期退出。但是,这个退出代码可以自己在代码中设置,以完全忽略这一点。

我能找到的最接近有用的信息链接是 这个

链接:

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


来自 GetEXitCodeThread的文档

重要信息 GetExitCodeThread 函数仅在线程终止后才返回由应用程序定义的有效错误代码。因此,应用程序不应该使用 STILL _ Aactive (259)作为错误代码。如果线程返回 STILL _ Aactive (259)作为错误代码,测试这个值的应用程序可以将其解释为线程仍在运行,并在线程终止后继续测试线程的完成情况,这可能会使应用程序陷入无限循环。


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

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

我在调试 Web 服务时看到了很多这样的情况,因为线程在执行每个 Web 服务调用之后继续运行(因为它仍然在监听进一步的调用)。

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