Mendapatkan id utas panggilan metode saat ini


122

Apakah ada cara untuk mencetak id utas saat ini di mana metode saat ini sedang dijalankan?

(mohon obyektif-c)


3
nall menjawab pertanyaan, tapi bukan pertanyaan sebenarnya .... kenapa kamu ingin tahu? Selain men-debug atau menyatakan perilaku yang benar, hal-hal dasar di currentThread umumnya merupakan ide yang buruk.
— bbum

I untuk satu membutuhkannya untuk membuat objek thread-lokal yang dilampirkan ke objek lain (yaitu terkait ke objek induk dan thread - bukan hanya thread).
— adib

Jawaban:


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

Apa arti nama = (null), jika utas utama mengembalikan NSThread: 0x60800006cb80> {number = 1, name = main}, Apakah itu berarti "nama = (null)" mengacu pada utas latar belakang.
— Nirmala Maurya

Dan bagaimana seseorang mengambil nama dan nomor itu? namemengembalikan deskripsi kosong bahkan untuk utama dan numbertidak bisa ditemukan
— Hari Karam Singh

Nomor benang cepat dan kotor: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 Memang, apa lagi yang Anda harapkan, menampilkan ID utas yang berbeda?
— arti-penting

The [NSThread currentThread]metode kelas mengembalikan sebuah objek NSThread. Anda dapat mencatat alamat objek utas itu, tetapi bagaimana cara mendapatkan ID utas numerik, seperti yang ditampilkan di debugger Xcode? (Utas 1 untuk utas utama, dan bertambahnya angka untuk setiap utas tambahan yang dibuat oleh aplikasi Anda.)
— Duncan C

@ Duncan: Itu hampir pasti merupakan fitur debugger, bukan OS / runtime.
— Cameron




-1

Anda dapat meretas sesuatu seperti ini (ini hanya tercetak cantik, tetapi Anda dapat melanjutkan dan membaginya sampai Anda mendapatkan nomornya):

+ (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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.