什么是线程退出代码?

时间:2013-09-19 06:45:32

标签: c# multithreading debugging exit-code

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

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

是否有某种可能的退出代码列表及其重要性?

3 个答案:

答案 0 :(得分:98)

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

我可以找到的用于获取更多信息的最近链接是this

从上面链接引用:

  

退出的方法是什么,从进程或线程返回的整数必须是0-255(8bits)的值。零值表示成功,而非零值表示失败。虽然,您可以尝试返回任何整数值作为退出代码,但只有整数的最低字节作为退出代码的一部分从您的进程或线程返回。操作系统使用更高阶的字节来传达有关该过程的特殊信息。退出代码在批处理/ shell程序中非常有用,它有条件地执行其他程序,具体取决于一个程序的成功或失败。


来自GetEXitCodeThread的文档

  

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


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

答案 1 :(得分:54)

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

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

答案 2 :(得分:0)

我发生的事情是我的解决方案中有多个项目。我打算调试项目1,但是,项目2被设置为默认的启动项目。我修复此问题,右键单击项目并选择"设置为启动项目",然后运行调试就可以了。