현재 메서드 호출의 스레드 ID 가져 오기


122

현재 메서드가 실행중인 현재 스레드 ID를 인쇄하는 방법이 있습니까?

(objective-c 제발)


3
nall이 질문에 대답했지만 실제 질문은 아닙니다 .... 왜 알고 싶으십니까? 디버깅이나 올바른 동작을 주장하는 것 외에도 currentThread에 대한 기본 사항은 일반적 으로 나쁜 생각입니다.
bbum

필자는 다른 개체에 연결된 스레드 로컬 개체 (즉 , 스레드뿐만 아니라 부모 개체 스레드에 연결됨)를 만드는 데 필요했습니다 .
adib 2010

답변:


228
NSLog(@"%@", [NSThread currentThread]);

name = (null)의 의미는 무엇입니까, thread가 main이면 NSThread를 반환합니다 : 0x60800006cb80> {number = 1, name = main}, "name = (null)"은 백그라운드 스레드를 의미합니까?
Nirmala Maurya

그리고 그 이름과 번호를 어떻게 잡습니까? name심지어 주요 비어 설명을 반환하고 number아무 곳에도 발견 할 수있다
하리 카람 싱

빠르고 더러운 스레드 번호 :NSString *s = [NSString stringWithFormat:@"%@", [NSThread currentThread]]; int threadNum = -1; sscanf(s.UTF8String, "<NSThread: 0x%*12[0-9a-f]>{number = %d", &threadNum);
Hari Karam Singh

35
#include <pthread.h>
...
mach_port_t machTID = pthread_mach_thread_np(pthread_self());
NSLog(@"current thread: %x", machTID);

4
@ Rajneesh071 사실, 다른 스레드의 ID를 표시하는 다른 무엇을 기대 했습니까?
의미 - 중요한

[NSThread currentThread]클래스 메소드는 NSThread 객체를 반환합니다. 해당 스레드 개체의 주소를 기록 할 수 있지만 Xcode 디버거에 표시되는 것과 같은 숫자 스레드 ID를 어떻게 얻습니까? (메인 스레드의 경우 스레드 1, 앱에서 생성되는 각 추가 스레드의 수는 증가합니다.)
Duncan C

@Duncan : 이것은 거의 확실히 디버거의 기능이지 OS / 런타임이 아닙니다.
Cameron




-1

다음과 같이 해킹 할 수 있습니다 (예쁘게 인쇄되지만 번호를 얻을 때까지 계속해서 분할 할 수 있습니다).

+ (NSString *)getPrettyCurrentThreadDescription {
    NSString *raw = [NSString stringWithFormat:@"%@", [NSThread currentThread]];

    NSArray *firstSplit = [raw componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"{"]];
    if ([firstSplit count] > 1) {
        NSArray *secondSplit     = [firstSplit[1] componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"}"]];
        if ([secondSplit count] > 0) {
            NSString *numberAndName = secondSplit[0];
            return numberAndName;
        }
    }

    return raw;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.