Nhận id luồng của cuộc gọi phương thức hiện tại


122

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 hiện không?

(mục tiêu-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 muốn biết? Ngoài việc gỡ lỗi hoặc khẳng định hành vi chính xác, những thứ cơ bản trên currentThread nói chung là một ý tưởng tồi.
bbum

Tôi cho một người cần nó để tạo các đối tượng luồng cục bộ được gắn vào một đối tượng khác (tức là được liên kết với một đối tượng cha luồng - không chỉ là luồng).
adib

Câu trả lời:


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

Ý nghĩa của name = (null) là gì, nếu chủ đề là chính, nó trả về NSThread: 0x60800006cb80> {number = 1, name = main}, Có nghĩa là "name = (null)" chỉ chủ đề nền.
Nirmala Maurya

Và làm thế nào để lấy một cái tên và số đó? nametrả về mô tả trống ngay cả cho chính và numberkhông tìm thấy ở đâu
Hari Karam Singh

Số chủ đề nhanh và bẩn: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 Thật vậy, bạn còn mong đợi gì nữa, hiển thị ID của một chủ đề khác?
ý nghĩa-vấn đề

Các [NSThread currentThread]phương pháp lớp trả về một đối tượng NSThread. Bạn có thể đăng nhập địa chỉ của đối tượng luồng đó, nhưng làm thế nào để bạn có được ID luồng số, giống như những gì được hiển thị trong trình gỡ lỗi Xcode? (Chủ đề 1 cho chủ đề chính và tăng số lượng cho mỗi chủ đề bổ sung được tạo bởi ứng dụng của bạn.)
Duncan C

@Duncan: Đó gần như chắc chắn là một tính năng của trình gỡ lỗi, không phải hệ điều hành / thời gian chạy.
Cameron

25

Trong Swift 5

print("Current thread \(Thread.current)")



-1

bạn có thể hack thứ gì đó như thế này (cái này chỉ in đẹp, nhưng bạn có thể tiếp tụ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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.