1

我正在将日志语句写入文件,并希望在每一行前面加上生成语句的线程 ID。

看来 GetCurrentThreadId 函数总是返回一个数字 <= 9999。所以,我可以假设我总是可以将线程 ID 格式化为四位数字字符串吗?我想保持 id 简短且长度一致,以使日志文件更易于阅读。

GetCurrentThreadId 返回一个显然可能包含大数字的 DWORD。

谢谢。

4

4 回答 4

3

为什么不把它写成十六进制,那么它会很好地适合 8 位数字呢?

//编辑(不能数!)

于 2012-06-14T12:54:17.437 回答
3

GetCurrentThreadID 的 MSDN 页面说:

the thread identifier uniquely identifies the thread throughout the system.

因此,线程 ID 在整个系统中是唯一的,而不仅仅是您的进程,其中很有可能在某个时候返回一个大于 4 位十进制数的值。

于 2012-06-14T12:57:28.520 回答
2

简短的回答:没有

实际上对于 32 位应用程序,(虚拟)限制大约是 2k 线程。对于 64 位应用程序,它大约有 14k 个线程。

阅读这篇文章作为快速参考:http: //blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

这是线程总数的限制(这是主要的内存问题,因为每个线程的堆栈),但是没有任何关于如何分配线程 ID 的规则(如果您的应用程序创建了很多短暂的线程,那么您可能会超出这个假设)。

于 2012-06-14T12:56:02.217 回答
1

给它另一个字符空间。它不会杀死你,正如你提到的,线程 ID 是一个 DWORD,因此可能更大。

于 2012-06-14T12:58:43.800 回答