2012-06-14 3 views
1

나는 로그 문을 파일에 작성하고 각 행 앞에 문을 생성 한 스레드 ID를 붙이고 자한다.스레드 ID는 항상 4 자리 10 진수로 맞습니까?

GetCurrentThreadId 함수는 항상 숫자 < = 9999를 반환합니다. 그래서 항상 스레드 ID를 4 자리 문자열로 포맷 할 수 있습니까? ID를 짧게하고 일관된 길이로 유지하여 로그 파일을 읽기 쉽게 만듭니다.

GetCurrentThreadId는 분명히 큰 숫자를 포함 할 수있는 DWORD를 반환합니다.

감사합니다.

+1

적은 경우 4 자리로 채우지 만 필요한 경우 더 많이 허용하지 않는 이유는 무엇입니까? 어쩌면 미래의 OS 버전이 사실 일지라도 귀하의 가정을 무효화 할 것입니다. – jjrv

+0

나는 모든 가능한 미래 사건에 대해 코딩하면, 나는 결코 끝내지 않을 것이기 때문에 나는 생각한다. 나는 현재의 OS와 Windows8에 관심이있다. 미래의 OS에서 4 자리 이상이 필요하다면 즉시 수정 해 드리겠습니다. –

+1

약간 긴 문자열을 할당하는 것은 별 문제가되지 않습니다. 그리고 API 사양에 따라 코드를 작성해야하므로 다음 릴리스에서 쉽게 피할 수있는 충돌이 발생하지 않습니다. – jjrv

답변

3

GetCurrentThreadID의 MSDN 페이지는 말한다 :

the thread identifier uniquely identifies the thread throughout the system. 

그래서 스레드 ID, 그것은 약간의 시간에서,을 반환 할 수있는 좋은 가능성이있는 시스템에서 고유뿐 아니라 프로세스입니다 값은 4 자리 10 진수보다 큽니다.

3

16 진수로 쓰지 않는 이유는 8 자리로 잘 맞을까요?

// 편집 (셀 수 없다!)

+0

0xFFFF까지의 값에 적합하지만 DWORD는 0xFFFFFFFF까지 유지할 ​​수 있습니다. –

+0

예 - DWORD가 32 비트이므로 8 자 (Doh!)로 맞습니다. 그럴 수있는 거대한 숫자보다 여전히 낫습니다. – Wolf5370

+0

예, 16 진수를 사용하는 것이 좋습니다. –

2

짧은 대답 : 예을.

실제로 32 비트 응용 프로그램의 경우 (가상) 제한은 약 2k 스레드입니다. 64 비트 응용 프로그램의 경우 약 14k 스레드입니다.

하는 것은이 글을 빨리 참조 읽기 :이 스레드의 총 수 (때문에 각 스레드의 스택 메모리의 그것의 주요 문제)에 대한 제한이 http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

하지만 어떻게 스레드에 대한 규칙이 아니다 ID가 할당됩니다 (응용 프로그램에 짧은 생활 스레드가 많이 생성 된 경우 일 수 있습니다.이 넘을 수 있습니다).

1

다른 문자 공간을 지정하십시오. 그것은 당신을 죽이지 않을 것이고 쓰레드 ID는 DWORD와 마찬가지로 일 수 있습니다.