2009-10-24 24 views
110

Có cách nào để in ra id luồng hiện tại mà phương thức hiện tại đang thực thi không?Nhận id luồng của phương thức hiện tại, gọi

(Objective-C xin vui lòng)

+3

Nall đã trả lời câu hỏi, nhưng không phải là câu hỏi thực sự .... tại sao bạn lại muốn biết? Ngoài việc gỡ lỗi hoặc khẳng định hành vi đúng, các công cụ cơ bản trên currentThread là * thường * một ý tưởng tồi. – bbum

+0

Tôi cho một trong những cần thiết nó để tạo ra các đối tượng thread-local được gắn vào một đối tượng khác (tức là liên quan đến một đối tượng cha _and_ thread - không chỉ là thread). – adib

Trả lời

202
NSLog(@"%@", [NSThread currentThread]); 
+6

{name = (null), num = 1} – Rajneesh071

+0

Ý nghĩa của tên = (null), nếu chuỗi là chính nó trả về NSThread: 0x60800006cb80> {number = 1, name = main}, Không nó có nghĩa là "name = (null)" đề cập đến chủ đề nền. –

+0

Và làm cách nào để lấy tên và số đó? 'name' trả về mô tả rỗng ngay cả đối với chính và' số' không có ở đâu được tìm thấy –

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

luôn hiển thị chủ đề hiện tại: c07 – Rajneesh071

+3

@ Rajneesh071 Thật vậy, bạn đã làm gì khác mong đợi, hiển thị ID của một chủ đề khác? –

+0

vâng .. nếu tôi ở trên các chủ đề khác nhau thì hiển thị khác nhau. – Rajneesh071

-1

bạn có thể hack một cái gì đó như thế này (điều này chỉ in đẹp, nhưng bạn có thể đi trước và chia cho đến khi bạn nhận được số):

+ (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; 
} 
11

Trong Swift

print("Current thread \(NSThread.currentThread())") 
16

Trong Swift3

print("Current thread \(Thread.current)") 
Các vấn đề liên quan